以下程序是重新排列字符串.对于第8行,我试图将正则表达式的结果存储到新变量$ newdate中,但是当第9行打印$ newdate时,它只显示1.如何更改我的代码以便$ newdate将存储正则表达式操作的$ date值?
1 #!/usr/bin/perl
2
3 # This program changes the date format from mm/dd/yyyy to yyyy,mm,dd
4
5 $date = '21/11/2011';
6 print "Current: $date\n";
7
8 $newdate = $date =~ s/(..)\/(..)\/(....)/$3,$2,$1/;
9 print "New: $newdate\n";
Run Code Online (Sandbox Code Playgroud)
Fai*_*Dev 16
你也可以这样做:
my $date = '21/11/2011';
print "Current: $date\n";
my $newdate;
($newdate = $date) =~ s/(..)\/(..)\/(....)/$3,$2,$1/;
print $newdate;
Run Code Online (Sandbox Code Playgroud)
Zai*_*aid 13
从Perl 5.13.2开始,可以通过s///r修饰符指定非破坏性替换,因此分配了替换后字符串的副本而不是匹配数.它还可以防止修改原始字符串,这意味着两个赋值具有相同的行为:
( my $new_date = $date ) =~ s<(..)/(..)/(....)><$3,$2,$1>; # Pre-5.13.2
my $new_date = $date =~ s<(..)/(..)/(....)><$3,$2,$1>r; # Post-5.13.2
Run Code Online (Sandbox Code Playgroud)
非破坏性替代
替换运算符现在支持
/r复制输入变量的选项,在副本上执行替换并返回结果.原件保持不变.Run Code Online (Sandbox Code Playgroud)my $old = 'cat'; my $new = $old =~ s/cat/dog/r; # $old is 'cat' and $new is 'dog'