我有一個字符串,爲什麼從數組中讀取#時會消失?
my $element="abc#$def"
我逃使用#,
$element=~s/#/\\#/g;
打印出來的:abc\#$def
,這是完美的。代碼的
接着的部分是:
push(@arr,$element);
foreach $val (@arr)
{
print $val;
}
而foreach循環內打印的值是:abc#$def
。
爲什麼#
不能在這裏逃脫?我該如何保留逃跑?
我有一個字符串,爲什麼從數組中讀取#時會消失?
my $element="abc#$def"
我逃使用#,
$element=~s/#/\\#/g;
打印出來的:abc\#$def
,這是完美的。代碼的
接着的部分是:
push(@arr,$element);
foreach $val (@arr)
{
print $val;
}
而foreach循環內打印的值是:abc#$def
。
爲什麼#
不能在這裏逃脫?我該如何保留逃跑?
你沒有放棄向我們展示了一切。要獲得您的聲明結果,我必須創建如下所示初始化的變量$def
。但是,當我這樣做時,我會得到你期望的結果,而不是你顯示的結果。
$ cat xx.pl
use strict;
use warnings;
my $def = '$def';
my $element = "abc#$def";
$element =~ s/#/\\#/g;
print "$element\n";
my @arr;
push(@arr, $element);
foreach my $val (@arr)
{
print $val;
print "\n";
}
$ perl xx.pl
abc\#$def
abc\#$def
$
這是用Perl 5.14.1在MacOS X 10.6.8測試過,但我不認爲行爲將與任何其他版本的Perl 5
鑑於這種變化,可以更新你的問題顯示一個類似於我的腳本(特別是use strict;
和use warnings;
),但是會產生你顯示的結果?
像這樣的東西:
$element=~s/#/\\#/g;
你必須逃離\
編輯
此代碼的工作在我的機器上,你希望:
use strict;
use warnings;
use Data::Dumper;
my $element='abc#$def';
my @arr;
$element=~s/#/\\#/g;
print $element."\n";
push(@arr,$element);
foreach my $val (@arr)
{
print $val;
}
謝謝Jonathan,我錯過了「嚴格使用」,不知道這是否是原因。按需要工作。 :) – Mini