小编rml*_*mlc的帖子

使用split,Perl默认变量$ _或@_在OS X到linux上的行为是否有所不同?

我是Perl的新手,并且长期以来一直在努力寻找这个问题的答案,但我被困住了.

请看以下示例:

my $filein = $ARGV[0];
open(SNPIN,$filein);

while(<SNPIN>)
{
   chomp;
   split(/\s+/);
   print "$_[0]\n";
}

close(SNPIN);
Run Code Online (Sandbox Code Playgroud)

我使用的测试文件包含以下行:

This is a test.
Is a test.
A test.
Run Code Online (Sandbox Code Playgroud)

这个脚本在我们的linux服务器上运行正常(使用perl 5.10),输出每行的第一个单词 - 虽然它给了我以下警告:

Use of implicit split to @_ is deprecated at scan_test.pl line 7.
Run Code Online (Sandbox Code Playgroud)

但是当我尝试在运行OS X的本地机器上执行它(使用perl 5.12.3)时,我收到以下错误:

Useless use of split in void context at scan_test.pl line 7.
Use of uninitialized value $_[0] in concatenation (.) or string at 
scan_test.pl line 8, <SNPIN> line 1.
Run Code Online (Sandbox Code Playgroud)

显然这是一个虚拟脚本.我继承了其他人非常漫长而复杂的脚本,它正在我们的服务器上工作,但我想在本地开发它,而不必遍历整个脚本并将所有默认变量调用重新分配给另一个变量.无论我尝试过什么(包括"使用v5.10;"),任何东西都不允许我在本地机器上使用默认变量.

有任何想法吗?非常感谢帮助.

perl cross-platform

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

标签 统计

cross-platform ×1

perl ×1