带有虚拟占位符的 Perl 赋值

问题描述 投票:0回答:4

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

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

但是我收到以下错误:

无法修改 ./generate_datasets.pl 第 17 行“);”附近列表赋值中的常量项
由于编译错误,./generate_datasets.pl 的执行中止。

Perl 是否有类似的模式,我可以使用它来代替创建无用的临时变量?

perl split
4个回答
47
投票

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

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

17
投票

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

use warnings;
use strict;

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

打印:

id123

10
投票

您可以分配给

(undef)

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

您甚至可以使用

my (undef)

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

您还可以使用列表切片。

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

3
投票

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

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

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

此文件句柄是一个常量值,无法写入。该变量存储在与

$_
@_
相同的 typeglob 中。

参见 perldoc stat

© www.soinside.com 2019 - 2024. All rights reserved.