使用虚拟占位符进行Perl赋值

时间:2011-05-06 21:15:50

标签: perl split

在我使用的其他语言中,如Erlang和Python,如果我分割字符串并且不关心其中一个字段,我可以使用下划线占位符。我在Perl中试过这个:

   (_,$id) = split('=',$fields[1]);

但是我收到以下错误:

  

无法在./generate_datasets.pl第17行,“)附近修改列表赋值中的常量项;”

  由于编译错误,./generate_datasets.pl的执行中止。

Perl是否有类似的模式,我可以使用而不是创建无用的临时变量?

4 个答案:

答案 0 :(得分:40)

undef在Perl中具有相同的用途。

(undef, $something, $otherthing) = split(' ', $str);

答案 1 :(得分:17)

如果您使用Slices,则甚至不需要占位符:

use warnings;
use strict;

my ($id) = (split /=/, 'foo=id123')[1];
print "$id\n";

__END__

id123

答案 2 :(得分:8)

您可以分配到(undef)

(undef, my $id) = split(/=/, $fields[1]);

您甚至可以使用my (undef)

my (undef, $id) = split(/=/, $fields[1]);

您也可以使用列表切片。

my $id = ( split(/=/, $fields[1]) )[1];

答案 3 :(得分:1)

只是为了解释为什么你会得到你所看到的特定错误......

_是一个内部Perl变量,可以在stat命令中用来表示“我们在之前的stat调用中使用的文件相同”。这样,Perl使用缓存的统计数据结构,并且不会进行另一次stat调用。

if (-x $file and -r _) { ... }

此文件句柄是常量值,无法写入。变量存储在与$_@_相同的类型地球中。

请参阅perldoc stat