【发布时间】:2021-02-27 07:37:14
【问题描述】:
我正在尝试将一些变量替换为字符串。 哈希包含数据,$name 字符串是格式。 它将放入两个变量,但不会放入 %M 一个。 我很困惑。我尝试了两种不同的信号字符,并且 有和没有空格的替代品。 %M 没有进去。????
use Data::Dumper;
my %Sub = (A=>'Alan',G=>'42', M=>"Memories of Japan");
print "\%Sub=\n".Dumper(%Sub)."\n====\n";
my $name = "#M #A (#G).epub";
print "$name\n====\n";
$name =~ s/(#([AGM]))/($Sub{$2})/eeg;
print "$name\n====\n";
%Sub = (A=>'Bob',G=>'13', M=>'NightHawk');
print "\%Sub=\n".Dumper(%Sub)."\n====\n";
$name = "%M %A (%G).epub";
print "$name\n====\n";
$name =~ s/(%([AGM]))/($Sub{$2})/eeg;
print "$name\n====\n";
【问题讨论】:
-
没关系...代码错误。
-
$name =~ s/(%([AGM]))/($Sub{$2})/eeg;仍然不会用空格替换字符串。 -
该正则表达式匹配
A、G、I([AGI]字符类)——不匹配M...? -
谢谢zdim。我抓到这么晚了。但是,第一个仍然不适用于包含空格的字符串。
-
现在写不出正确的答案... (1) 不需要
ee可能非常危险,这里甚至不需要e(2)太多的括号...试试这个单行:perl -wE'$n = "#M #A (#G)"; say $n; %h = (M => "x", A => "y", G => "z"); $n =~ s/#([AGM])/#$h{$1}/g; say $n'