小编jin*_*wow的帖子

我怎样才能在Perl中转换时区?

我想在Perl中将日期/时间GMT 0转换为GMT -6.

例如,DHCP服务器租约时间采用以下格式:

2010/02/18 23:48:37

我正在尝试将该时间转换为Localtime区域(GMT -6),但需要它来兑现夏令时.

下面的脚本可能有点矫枉过正,但我​​不知道如何从这里开始.(任何建议都很棒).

my $TIMESTART;

$TIMESTART = "2010/02/18 23:48:37";
$TIMESTART =~ s/\//-/g;

use DateTime;
use DateTime::TimeZone;

use DateTime::Format::MySQL;
my $dt = DateTime::Format::MySQL->parse_datetime($TIMESTART);

my $tz = DateTime::TimeZone->new( name => 'America/Chicago' );

print $tz->offset_for_datetime($dt) . "\n";
Run Code Online (Sandbox Code Playgroud)

它将输出以下行:

2010-02-18T23:48:37
-21600

我需要能够在日期中添加-21600以获得GMT -6的本地时区,但我不知道如何解决这个问题.

perl datetime gmt

11
推荐指数
1
解决办法
1万
查看次数

Perl Concat字符串截断行的开头

我在perl遇到一个奇怪的问题,我似乎无法找到答案.

我有一个小脚本,将解析来自外部的数据(无论是文件,网站等).解析数据后,它会将其保存为CSV文件.但是,问题是当我写文件或打印来筛选数据时,它似乎是截断字符串的开头.我正在使用严格和警告,我没有看到任何错误.

这是一个例子:

print "Name: " . $name . "\n";
print "Type: " . $type. "\n";
print "Price: " . $price . "\n";
print "Count: " . $count . "\n";
Run Code Online (Sandbox Code Playgroud)

它将返回以下内容:

John
Blue
7.99
5
Run Code Online (Sandbox Code Playgroud)

如果我尝试这样做:

print "$name,$type,$price,$count\n";
Run Code Online (Sandbox Code Playgroud)

我得到以下结果:

,7.99,5
Run Code Online (Sandbox Code Playgroud)

我尝试了以下内容以查看问题的开始位置并获取以下内容:

print "$name\n";
print "$name,$type\n";
print "$name,$type,$price\n";
print "$name,$type,$price,$count\n";
Run Code Online (Sandbox Code Playgroud)

结果:

John
John,Blue
,7.99
,7.99,5
Run Code Online (Sandbox Code Playgroud)

我还在学习perl,但似乎无法找出(可能由于缺乏知识)造成这种情况的原因.我尝试调试脚本,但我没有看到价格变量中的任何特殊字符会导致这种情况.

variables perl truncate concatenation

4
推荐指数
1
解决办法
865
查看次数

如何在Perl中找到每个接口的IP地址?

我试图在linux盒子上找到一个IP地址列表.目前我的设置是CentOS机器,每个VLAN都有几个用于eth0的子接口.我正在编写一个脚本,以查看每个VLAN IP地址是否与某些IP地址(每个网络的不同IP地址)连接.

例如:

  • eth0的IP为10.0.0.2 netmask 255.255.255.128

  • eth0.2的IP为10.0.130,网络掩码为255.255.255.128

  • eth0.3的IP为10.0.1.2 netmask 255.255.255.128

每个接口当前通过配置文件设置为静态IP地址.但是,我想将它从静态更改为DHCP并获得相同的IP地址.如果我这样做,它将破坏脚本的这一部分:

@devarray = `cat /etc/sysconfig/network-scripts/ifcfg-eth0* | grep IPADDR=10 -B 10 | grep -v "#" | grep IPADDR`;
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来确定可用的IP地址.我需要收集的只是IP地址而不是设备名称.

linux perl networking centos

3
推荐指数
2
解决办法
1万
查看次数

行到SQL Server查询列

我正在编写一个将在.NET应用程序中使用的查询,因此我希望SQL Server 2008为我做大部分处理,而不是运行应用程序的客户端PC.

我试图从具有索引值的单个表中获取数据,基于该索引值,我希望该项放置在特定列中.

这是一个例子:

表MAS:

MA      SN      Mindex
B275    7A1515  1
B276    7A1515  2
E530    7A1515  3
B291    7A1519  1
B292    7A1519  2
E535    7A1519  3
B301    7A2515  1
B302    7A2515  2
B331    7A2519  1
B332    7A2519  2
Run Code Online (Sandbox Code Playgroud)

这是我想要的输出:

 SN      mi1     mi2     mi3
 7A1515  B275    B276    E530
 7A1519  B291    B292    E535
 7A2515  B301    B302    null
 7A2519  B331    B332    null
Run Code Online (Sandbox Code Playgroud)

我尝试执行以下查询,它适用于具有3个索引的项目,但如果只有两个,则使用随机数据填充它.

 select mas1.SN, mas1.MA as mi1,mas2.MA as mi2, mas3.MA as mi3
 from MAS ma1, MAS ma2, MAS ma3
 where mas1.SN …
Run Code Online (Sandbox Code Playgroud)

sql sql-server select

0
推荐指数
1
解决办法
5943
查看次数

Perl动态生成的多维联想阵列

这可能是我的一个简单的疏忽(或者比我的技能更先进的东西).我试图通过读取文件的输入动态填充二维关联数组.

my @data;
while (<FILE>) {
    chomp;

    my $ID,$COUNT;
    print "READ: " . $_ . "\n"; #Debug 1

    ($ID,$COUNT,undef,undef,undef) = split /\,/;
    print "DATA: " . $ID . "," . $COUNT . "\n"; # Debug 2

    $data{$ID}{"count"} = $COUNT;
    #push @{$data{$ID}{"count"}}, $COUNT; 

              print $data{$ID}{"count"} . "\n"; # Debug 3
}
Run Code Online (Sandbox Code Playgroud)

第一次打印(Debug 1)将打印类似des313,3 ,,,的行.

第二次打印(Debug 2)将打印一行DATA:des313,3

第三个打印(Debug 3)将打印一个空行.

这个问题似乎与我试图将数据插入关联数组的方式有关.我已尝试直接插入和推送方法没有结果.我用PHP完成了这个,但我想我在Perl中忽略了这一点.我确实看过HASHES HASHES部分中的perldoc perldsc页面但是我没有看到它谈论动态生成它们.任何建议都会很棒!

perl associative-array multidimensional-array

0
推荐指数
1
解决办法
2222
查看次数