代碼片段:
use File::Basename;
my @powerArray;
my $powerLoc = "/home/yuerki/10.12/proj";
@powerArray = glob("$powerLoc/*") if (-e $powerLoc);
print "FIRST: @powerArray is powerArray\n";
foreach my $powerNum (@powerArray) {
$powerNum= basename ($powerNum);
if($powerNum =~ /power/)
{
$powerNum =~ s/power//g;
$powerNum =~ s/\n//g;
$powerNum =~ s/^\s |\s $//g;
push(@powerList,"$powerNum") if ($powerNum =~ /^\d $/);
}
}
print "SECOND: @powerArray is powerArray\n";
“/home/yuerki/10.12/proj/”里面的內容是: power1, power2, power3, power4, power5
輸出:
第一個:/home/yuerki/10.12/proj/power1 /home/yuerki/10.12/proj/power2 /home/yuerki/10.12/proj/power3 /home/yuerki/10.12/proj/power4 /home/yuerki/10.12/proj /power5 是 powerArray
第二:1 2 3 4 5 是 powerArray
問題/疑問: 為什么“SECOND: 1 2 3 4 5 is powerArray”已經輸出?我期待它是“第二個:/home/yuerki/10.12/proj/power1 /home/yuerki/10.12/proj/power2 /home/yuerki/10.12/proj/power3 /home/yuerki/10.12/proj/power4 / home/yuerki/10.12/proj/power5" 因為我們沒有在@powerArray 中進行任何更改,僅在$powerNum?
誰能解釋一下?另外,我怎樣才能避免@powerArray 中的替換更改?因為我也需要在其他地方使用這個全域陣列
uj5u.com熱心網友回復:
進行如下修改:
...
@powerArray = glob("$powerLoc/*") if (-e $powerLoc);
print "FIRST: @powerArray is powerArray\n";
foreach my $element (@powerArray) {
my $powerNum = $element;
$powerNum= basename($powerNum);
if($powerNum =~ /power/){
...
希望這可以幫助。
uj5u.com熱心網友回復:
foreach 回圈不是為該互動復制標量,而是將回圈變數別名給它。
my $y = 123;
for my $x ( $y ) {
$x = 456;
}
say $y; # 456
復印一份。
for ( @powerArray ) {
my $powerNum = $_;
...
}
或者避免修改它。
push @powerList, basename( $powerNum ) =~ /^power(\d )/;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/493834.html
