带有虚拟占位符的 Perl 赋值

发布于 2024-11-05 06:53:08 字数 336 浏览 0 评论 0原文

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

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

但出现以下错误:

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

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

In other languages I've used like Erlang and Python, if I am splitting a string and don't care about one of the fields, I can use an underscore placeholder. I tried this in Perl:

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

But I get the following error:

Can't modify constant item in list assignment at ./generate_datasets.pl line 17, near ");"
Execution of ./generate_datasets.pl aborted due to compilation errors.

Does Perl have a similar such pattern that I could use instead of creating a useless temporary variables?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

红焚 2024-11-12 06:53:08

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

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

undef serves the same purpose in Perl.

(undef, $something, $otherthing) = split(' ', $str);
只是一片海 2024-11-12 06:53:08

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

use warnings;
use strict;

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

符:

id123

You don't even need placeholders if you use Slices:

use warnings;
use strict;

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

Prints:

id123
等风也等你 2024-11-12 06:53:08

您可以分配给(undef)

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

您甚至可以使用my (undef)

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

您还可以使用列表切片。

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

You can assign to (undef).

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

You can even use my (undef).

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

You could also use a list slice.

my $id = ( split(/=/, $fields[1]) )[1];
凉城凉梦凉人心 2024-11-12 06:53:08

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

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

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

该文件句柄是一个常量值,无法写入。该变量存储在与 $_@_ 相同的 typeglob 中。

请参阅 perldoc stat

And just to explain why you get the particular error that you see...

_ is a internal Perl variable that can be used in the stat command to indicate "the same file as we used in the previous stat call". That way Perl uses a cached stat data structure and doesn't make another stat call.

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

This filehandle is a constant value and can't be written to. The variable is stored in the same typeglob as $_ and @_.

See perldoc stat.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文