我想通过递增字符串中的变量来创建一个字符串。
例如
$result = "Result: $amount++";
如何实现这一目标?
答案 0 :(得分:4)
可以使用技巧来完成。
$result = "Result: ${\( $amount++ )}";
但是你为什么要这么做?
$result = "Result: ".$amount++;
答案 1 :(得分:1)
我认为你有一个已经包含'number'(数字串)的字符串,你想在其中增加该数字。
你必须首先以这种或那种方式提取“数字”,因为它只是在字符串里面的一串字符;然后增加它并将它全部加回来。我会认为它是由非数字
限定的一串数字my ($pre, $num, $post) = $str =~ m/(\D*)(\d+)(\D*)/;
$str = $pre . ($num+1) . $post;
这是一个关键的假设,即单词只在一个地方包含一串数字而在其他地方没有数字,因为如果不是这样的话,那么问题就会出现问题。
只是为了好奇,我想补充一点。 substr可以访问字符串的一部分,并且可以将该函数操作为lvalue
(可以分配给)。所以,如果您要知道起始位置和“数字”的长度(可以通过各种方式找到),您可以在一个声明中填写上述过程,如果您必须
substr($str, $num_beg, $num_len) = substr($str, $num_beg, $num_len) + 1;
或同样糟糕
substr($str, $num_beg, $num_len) = ($str =~ m/(\d+)/)[0] + 1;
现在,您的起始$str
字符串包含递增的“数字”。然而,这是非常讨厌的,我不能推荐任何一个。最后,您当然可以在$num_beg
内动态找到$num_len
和substr
,但这太多了,因为在一个语句中,可怜的字符串将被处理三次。 (此外,这会更改您的$str
,您的问题提示不是您想要的。)
已添加 Regex提供了使用/e
修饰符在替换部件中运行代码的功能。
my $str = "ah20bah";
$str =~ s/(\d+)/$1+1/e;
say $str; # it's 'ah21bah'
请参阅此in perlrequick
和in perlop
。
答案 2 :(得分:1)
如果要修改字符串中的数字,则必须使用e
修饰符进行s
操作。这使得Perl将替换作为表达式进行评估。
#! /usr/bin/perl
$_ = "Result: 1\n";
s/\d+/$&+1/e;
print;
Perl manual中记录了它。