perl - Perl 中下划线($_、@_)的含义是什么?

标签 perl

我是 Perl 新手,我是这样使用它们的

$_

foreach (@list) {
    print "$_\n";
}

@_

sub search {
    my ($no, @list) = @_;
}

这些下划线变量在 Perl 中到底是如何工作的?还有哪些其他有用的结构?

最佳答案

这个问题表明您确实应该读一本书,也许还应该读 Perl 标签 FAQs 的其余部分。 .

尽管如此,$_ 是一个上下文变量,它由某些构造隐式创建并由某些内置函数隐式使用。以下是一些示例:

while(<>) {
    next if /^#/;
    last if /^q(?:uit)?$/;
    say "Howdy!" if /^hello$/;
}

这做了很多工作设置和检查 $_ 变量,相当于:

while(defined($_ = <>)) {
    next if $_ =~ /^#/;
    last if $_ =~ /^q(?:uit)?$/;
    say "Howdy!" if $_ =~ /^hello$/;
}

设置 $_ 的其他构造有:foreach 循环、given block 、map grep 操作,以及 Try::Tiny 中的 catch block .

使用 $_ 的其他构造有:裸 print; 语句、s/// 替换运算符和 tr/// 音译运算符。

我建议:当您学习 Perl 时,不要隐式使用 $_。完整地写下来(如上面的第二个示例),以在您的脑海中强化实际发生的情况。就像你学习外语一样,在学习缩写语言之前,你应该先学会正确、仔细地说话。

$_ 对于编写更短、更简洁的代码很有用,并且通过关注正在进行的处理而不是正在处理的变量实际上可以更清晰,但只有当您了解了哪些操作使用 $_ 是第二天性。否则,这只是一团困惑。

正如其他地方提到的,@_ 是子例程的参数列表。

关于perl - Perl 中下划线($_、@_)的含义是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3589837/

相关文章:

perl - 使用 Perl Text::CSV 从数据库写入

postgresql - Perl PostgreSQL 查询执行两次

用于在 Linux 上创建 Excel 电子表格的 Python 或 Perl

Perl - 使用 Socket 和特定 DNS 服务器的 DNS 查找

regex - 将正则表达式与 perl/sed/awk 中的变量字符串匹配

mysql - 使用执行的语句将结果插入到另一个表中(Perl DBI 和 MySQL)

perl - 为什么 HMAC SHA-1 会返回具有相同输入的不同摘要?

regex - 为什么这个 perl prog 不打印翻译后的文本?

macos - 在 OS X 中通过 perl 控制鼠标

mysql - 有没有办法使用 perl 观察 mysql 数据库的变化?