我寻找到问题的解决方案:更换&与和带固定在Perl
我有一个固定长度的字符串,它看起来像:
99 9999999999999 999999ZK9999.999999999999.999999999 (9999999) Text & to change something random here
我想更换任何&
符号与&
,但只有当此符号位于130和170左右的字符之间。 我还想在字符串的结尾添加必要的空间,所以在长度保持不变:
99 9999999999999 999999ZK9999.999999999999.999999999 (9999999) Text & to change something random here
,也许不只一个&
更换。
目前我创建了3个子字符串,然后我在第二个中做了所有必要的修改,并且将子字符串连接在一起。
my $subline1 = substr $line, 0, 130;
my $subline2 = substr $line, 130, 40;
my $subline3 = substr $line, 170;
if ($subline2 =~ s/(&)/&/ig) {
while (length($subline2)<40){
$subline2=$subline2." ";
}
$line=$subline1.$subline2.$subline3;
有没有更好的方法来实现这个目标?
编辑:加了我目前的解决方案
N.B. http://perldoc.perl.org/functions/substr.html“在Perl版本5.10之前,多次使用左值的结果是未指定的。” – ysth
@ysth,Unspecified?这是否意味着无证件?如果是这样,谁在乎? – ikegami
@ikegami这意味着无证,而不是任何人想要的。 IIRC,即使长度发生变化,它也会重复使用相同的起始长度,所以如果将长度为4的子字符串改为长度为3的字符串,最终会从字符串中删除字符 – ysth