Perl:还有比$ var = $ _更好的东西吗?

kor*_*rda 3 perl variable-assignment

这不是重要的问题而且我知道,buuut $var = $_;看起来只是跛脚,是否有更好(更短)的方式来完成任务?

澄清我的问题:我知道我可以$_轻松地使用代码(这就是我喜欢它的原因),但有时候我需要存储$_并执行某些操作$_然后返回旧值$_(例如).

Mat*_*ton 8

在新的词法范围内,您可以本地化$ _,这将阻止该范围内的任何修改影响其在该范围之外的值.

需要举一个例子来澄清:

$_ = 1;
say;
{ # open a new scope
    local $_ = 3;
    $_++;
    say;
} # close the scope
say;
Run Code Online (Sandbox Code Playgroud)

这应该打印

1
4
1
Run Code Online (Sandbox Code Playgroud)

我觉得编写在内部广泛使用$ _的函数是非常有价值的,因为当他们在周围范围内破坏$ _时我不喜欢它.但是,您也可以使用它来"预留"变量并使用它的新版本一段时间.


mkb*_*mkb 6

在许多情况下,这是不必要的.例如:

foreach my $var (@array) {
  dostuff($var);
}
Run Code Online (Sandbox Code Playgroud)

要么

my $var;
while ($var = <>) {
  chomp($var);
  dostuff($var);
}
Run Code Online (Sandbox Code Playgroud)

要么

while (<>) {
  chomp;
  dostuff($_);
}
Run Code Online (Sandbox Code Playgroud)