perl程序中的模式识别和字符串匹配错误

perl程序中的模式识别和字符串匹配错误,perl,Perl,我编写了这个小程序来匹配一个模式并替换它: #!/usr/bin/perl $LOGFILE = "odds.dat"; open(LOGFILE) or die("Could not open log file."); foreach $line (<LOGFILE>) { ($hour, $match, $odd1, $oddx, $odd2, $dummy) = split(/\,/,$line); ($hteam,$ateam) = split(/ § /,$match);

我编写了这个小程序来匹配一个模式并替换它:

#!/usr/bin/perl
$LOGFILE = "odds.dat";
open(LOGFILE) or die("Could not open log file.");
foreach $line (<LOGFILE>) {
($hour, $match, $odd1, $oddx, $odd2, $dummy) = split(/\,/,$line);
($hteam,$ateam) = split(/ § /,$match);
$hteam=get_name($hteam);
$ateam=get_name($ateam);
$match="$hteam - $ateam";
$foo=qq("$hour" "$match" $odd1 $oddx $odd2 \n) ;
print $foo;
               }
sub get_name {
# Return the full name for the team, if it exists, otherwise return the original
my %alias = (
"Atletico-MG" => "Atletico Mineiro",
"Atletico-PR" => "Atletico Paranaense",
...
...
"U.A.N.L.- Tigres" => "U.A.N.L.",
...
...
 );
return $alias{$_[0]} // $_[0];
}  
但结果是:

"2011-10-28 21:15 " " Atletico-MG - Atletico-PR " 2.00  5.00  6.00
"2011-10-28" "U.A.N.L. - Atletico-MG " 2.00 5.00 6.00

为什么不能识别马竞MG和马竞PR?

在“获取名称”函数的顶部添加以下调试行

warn "In get_name looking for <$_[0]>\n";

我认为这将清楚地说明问题所在。

在get\u name函数的顶部添加以下调试行

warn "In get_name looking for <$_[0]>\n";

我认为这将清楚地说明问题所在。

您的球队名称中有空格,例如,马竞MG与马竞MG不匹配。这可以在第一次拆分时删除。您也不需要转义逗号:

split(/\s*,\s*/,$line);
阐述:

你没有使用严格的警告,这是一个坏主意。建议使用三参数open和词法文件句柄,我建议使用$!在你的死亡信息中,这样你就知道为什么失败了。我还调整了你的另一个拆分,去掉空白,限制为两个字段,因为从来没有超过两个团队

如果不打算使用$dummy变量,则不需要它,因为拆分中的附加值将被丢弃。不过,您需要调整换行符,否则有时会出现两个换行符。我加了一个chomp

我认为你在时间和团队名称上的双引号是故意的。您可能会考虑使用选项卡分隔符进行打印。它是相当可读的,并且在进一步处理时使拆分更容易。例如:

print join "\t", $hour, $match, $odd1, $oddx, $odd2 . "\n";
代码:


您的球队名称中有空格,例如,马竞MG与马竞MG不匹配。这可以在第一次拆分时删除。您也不需要转义逗号:

split(/\s*,\s*/,$line);
阐述:

你没有使用严格的警告,这是一个坏主意。建议使用三参数open和词法文件句柄,我建议使用$!在你的死亡信息中,这样你就知道为什么失败了。我还调整了你的另一个拆分,去掉空白,限制为两个字段,因为从来没有超过两个团队

如果不打算使用$dummy变量,则不需要它,因为拆分中的附加值将被丢弃。不过,您需要调整换行符,否则有时会出现两个换行符。我加了一个chomp

我认为你在时间和团队名称上的双引号是故意的。您可能会考虑使用选项卡分隔符进行打印。它是相当可读的,并且在进一步处理时使拆分更容易。例如:

print join "\t", $hour, $match, $odd1, $oddx, $odd2 . "\n";
代码: