Perl Split with array 导致未初始化的值
Perl Split with array results in uninitialized value
我在两台不同的机器(Redhat 和 SUSE)上有相同的 Perl 脚本 运行。在 SUSE 上,脚本运行良好,但在 Redhat 上运行不正常。
这是我 运行 的整个脚本:
#!/usr/bin/perl
$str = "Cat|Dog|Bird";
$number = split /\|/, $str;
$type = @_[0];
print "number of args: $number and type is: $type \n";
我得到 2 个不同的输出
SUSE:
number of args: 3 and type is: Cat
红帽:
number of args: 3 and type is:
我想知道是什么原因造成的???在第一个 $type
中以某种方式初始化
注意:我忽略了警告 "Scalar value @_[0] better written as $_[0]",因为即使我更改它也没有任何区别。输出将是相同的。
Prior to Perl 5.11, it also overwrote @_ with the list in void and scalar context. If you target old perls, beware.
随后的第一个 稳定版本 是 v5.12,此后 split
如果在标量上下文中调用则不再覆盖 @_
:列表fields 被简单地丢弃,但仍然返回 number 个字段。 (请注意,因此在 void 上下文中调用 split
是完全无效的:列表及其大小都不会保存在任何地方。)它以前会覆盖当前子例程的参数,所以这是一个非常糟糕的主意
您的代码应如下所示
my $str = 'Cat|Dog|Bird';
my @fields = split /\|/, $str;
my $number = @fields;
my $type = $fields[0];
print "number of args: $number and type is: $type \n";
这将在所有版本的 Perl 上正常工作
我在两台不同的机器(Redhat 和 SUSE)上有相同的 Perl 脚本 运行。在 SUSE 上,脚本运行良好,但在 Redhat 上运行不正常。 这是我 运行 的整个脚本:
#!/usr/bin/perl
$str = "Cat|Dog|Bird";
$number = split /\|/, $str;
$type = @_[0];
print "number of args: $number and type is: $type \n";
我得到 2 个不同的输出
SUSE:
number of args: 3 and type is: Cat
红帽:
number of args: 3 and type is:
我想知道是什么原因造成的???在第一个 $type
中以某种方式初始化
注意:我忽略了警告 "Scalar value @_[0] better written as $_[0]",因为即使我更改它也没有任何区别。输出将是相同的。
Prior to Perl 5.11, it also overwrote @_ with the list in void and scalar context. If you target old perls, beware.
随后的第一个 稳定版本 是 v5.12,此后 split
如果在标量上下文中调用则不再覆盖 @_
:列表fields 被简单地丢弃,但仍然返回 number 个字段。 (请注意,因此在 void 上下文中调用 split
是完全无效的:列表及其大小都不会保存在任何地方。)它以前会覆盖当前子例程的参数,所以这是一个非常糟糕的主意
您的代码应如下所示
my $str = 'Cat|Dog|Bird';
my @fields = split /\|/, $str;
my $number = @fields;
my $type = $fields[0];
print "number of args: $number and type is: $type \n";
这将在所有版本的 Perl 上正常工作