我不是一个PERL专家,但在迁移一些脚本到新的服务器使用Perl的新版本和PHP所有的工作其他人工作,但这个特定的一个不工作。
我已经安装了这个脚本依赖运行的所有模块,并且这些PM相关的错误已经停止。
环境:
- Web服务器运行
- 的Ubuntu 12.04 LTS 64位
- 的Apache 2
- Mysql的
- PHP5
- freetds的
- 所有防火墙许可,远程数据库连接 测试和验证
- 所有必需的Perl模块和Apache/PHP5 扩展测试和验证
脚本功能:
脚本是为了从RSS拉故事,并把它们到远程数据库。
问题:
在脚本这个新的服务器我得到下面的错误上没有问题,运行旧的服务器:
Use of uninitialized value in string eq at ./parse_rss.pl line 27.
第27行是这样的:
if (ref($item->{'company:symbol'} eq 'ARRAY')) {
next;
请在下面查看完整的脚本:
#!/usr/bin/perl
#
use warnings;
use strict;
use DateTime;
use DateTime::Format::ISO8601;
use XML::FeedPP;
my $starttime;
if ($#ARGV == -1) {
$starttime = DateTime::Format::ISO8601->parse_datetime("1970-01-01T00:00:00");
}
else {
$starttime = DateTime::Format::ISO8601->parse_datetime($ARGV[0]);
}
my $feed = XML::FeedPP->new("http://RSS.FEED.URL");
my $num_items = $feed->get_item();
for (my $i = $num_items - 1; $i >= 0; $i--)
{
my $item = $feed->get_item($i);
my $dt = DateTime::Format::ISO8601->parse_datetime($item->pubDate);
if ($dt < $starttime) {
last;
}
if (ref($item->{'company:symbol'} eq 'ARRAY')) {
next;
}
if ($item->title =~ /(.+?) (upgraded|downgraded) to (.+?) from (.+?) at (.+)/) {
print sprintf("%04d-%02d-%02d %02d:%02d:%02d", $dt->year(), $dt->month(), $dt->day(), $dt->hour(), $dt->minute(), $dt->second()) . "|$1|" . $item->{'company:symbol'} . "|$2|$3|$4|$5\n";
}
elsif ($item->title =~ /(.+?) (initiated) with (\w+) (.+?) at (.+)/) {
print sprintf("%04d-%02d-%02d %02d:%02d:%02d", $dt->year(), $dt->month(), $dt->day(), $dt->hour(), $dt->minute(), $dt->second()) . "|$1|" . $item->{'company:symbol'} . "|$2|$4|...None...|$5\n";
}
}
任何帮助,将不胜感激
什么是'$项的值'?您可以使用['Data :: Dumper'](https://metacpan.org/pod/Data::Dumper)轻松打印散列 –
这些括号肯定是错误的。 'ref($ foo eq“bar”)'将始终返回一个空字符串,因为'eq'的结果永远不会是引用。 – ThisSuitIsBlackNot