背景:使用27
イムないPERLの専門家が、PerlとPHPの新しいバージョンすべてに新しいサーバーにいくつかのスクリプトの移行に取り組んで他の人は働いていますが、この特定の人は働きません。
このスクリプトが実行するために必要なすべてのモジュールがインストールされており、それらのPM関連のエラーは終了しました。
環境:
- のUbuntu 12.04 LTSを実行しているWebサーバーの64ビット
- のApache 2
- Mysqlの
- PHP5
- FreeTDSの
- すべてのファイアウォール権限とリモートデータベース接続 がテストされ、
- ALLが機能スクリプトをテストした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