這不是重要的問題,我知道,buuut $var = $_;
看起來只是跛腳,是否有更好(更短)的方式來完成這項任務?
爲了澄清我的問題:我知道我可以很容易地使用代碼$_
(這就是爲什麼我喜歡它),但有時我需要存儲$_
,並做一些對$_
,然後回來舊值的$_
(例如) 。
這不是重要的問題,我知道,buuut $var = $_;
看起來只是跛腳,是否有更好(更短)的方式來完成這項任務?
爲了澄清我的問題:我知道我可以很容易地使用代碼$_
(這就是爲什麼我喜歡它),但有時我需要存儲$_
,並做一些對$_
,然後回來舊值的$_
(例如) 。
按照第二次業績請求,我發佈我的評論作爲答案。
它看起來像你問是否有更好或更短的方式來編寫$var = $_
(或獲得該功能)。對我來說,這是一個相當奇怪的要求,因爲:
$var = $_
已經約短,因爲它得到,並所有好的答案。 @awm說,我想再提供一個與「僅使用$_
」有關的例子。
11分鐘前我剛寫這幾行:
sub composite
{
foreach my $element (@_)
{
# do something ...
}
}
sub simple
{
&composite($_[ int rand @_ ]);
}
這是一個Perl的高爾夫(cit.),不建議在所有使用。
如果您需要在其他地方存儲$_
,並在一段時間後使用它的原始值,您應該執行分配。
使用local
:
$_ = 1;
{
local $_ = 2;
say; # prints 2
}
say; # prints 1
在一個新的詞彙範圍,你可以本地化$ _,這將防止影響其該範圍以外的值範圍內的任何修改。
一個例子是必要的澄清:
$_ = 1;
say;
{ # open a new scope
local $_ = 3;
$_++;
say;
} # close the scope
say;
這應該打印
1
4
1
我覺得它非常寶貴的寫入功能,其廣泛使用的$ _內部,因爲我不喜歡當他們在他們周圍的範圍內闖入$ _時。但是,您也可以使用它來「擱置」一個變量並在一段時間內使用它的新版本。
可以使用map
通過將現有陣列生成一個新的數組:
my @squares = map { $_**2 } 1..10 ; # 1,4,9,16,25,36,49,64,81,100
my @after = map { process($_) } @before ; # @before unchanged, @after created
好像你想訪問$_
局部值的下推堆棧。那可能很酷。不過,你可以自己做這樣的東西。我可以告訴你基本知識。
our @A; # declare a stack
*::A = *A{ARRAY}; # "Globalize" it if necessary.
sub pd (&;@) # <- block operator prototype indicating language sugar
{
# I would have really preferred to do a push here.
local @A = (@A, $_);
# pull the block argument
my $block = shift;
# Ensure at least one execution
@_ = $_ unless @_;
# + Scalar behavior option #1
# return $block->(local $_ = shift) if not wantarray // 1;
# + Scalar behavior option #2
# unless (wantarray // 1) {
# my $result;
# while (@_) {
# local $_ = shift;
# return $result if defined($result = $block->($_));
# }
# return;
# }
# Standard filter logic
return map { $block->($_) } @_;
}
這裏是基於這樣的簡單列表理解:
my @comp
= map { pd { pd { join '', @A[-2,-1], $_ } qw<g h> } qw<d e f>; } qw<a b c>
;
這裏的@comp
:
@comp: [
'adg',
'adh',
'aeg',
'aeh',
'afg',
'afh',
'bdg',
'bdh',
'beg',
'beh',
'bfg',
'bfh',
'cdg',
'cdh',
'ceg',
'ceh',
'cfg',
'cfh'
]
也許通常稱爲apply
的功能是你在找什麼。應用就好比map
但它使得它的參數構建一個備份:
apply {CODE} LIST
apply a function that modifies $_ to a shallow copy of LIST and returns the copy
print join ", " => apply {s/$/ one/} "this", "and that";
> this one, and that one
下面是從我的模塊之一的實現:
所以,你想用你的數組/列表來計算一些東西,但不想修改它?只要先把表格複製一下,或者'使用Storable'clone';' – Zaid
「做些什麼」比如說什麼?如何在不使用任務的情況下存儲它? – TLP
@TLP我的問題是_是否有更好(更短)的方式來完成這項任務?_我想存儲它。我在詢問**較短的**方法來分配'$ _'。 – korda