我不是一個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