如何删除所有.从字符串除了最后?

San*_*ing 6 perl

我想.从除了最后一个之外的字符串中删除所有字符串.

它可以在JavaScript中完成

var s='1.2.3.4';
s=s.split('.');
s.splice(s.length-1,0,'.');
s.join('');
Run Code Online (Sandbox Code Playgroud)

但是当在Perl中尝试相同时

my @parts = split /./, $s;
my @a = splice @parts, $#parts-1,0;
$s = join "", @a;
Run Code Online (Sandbox Code Playgroud)

我明白了

Modification of non-creatable array value attempted, subscript -2 at ./test.pl line 15.
Run Code Online (Sandbox Code Playgroud)

任何人都可以弄清楚如何在Perl中做到这一点?

Bir*_*rei 9

我会使用正面预测的正则表达式perl来完成任务:

perl -pe 's/\.(?=.*\.)//g' <<<"1.2.3.4"
Run Code Online (Sandbox Code Playgroud)

结果:

123.4
Run Code Online (Sandbox Code Playgroud)

编辑以使用split以下方法为您的解决方案添加修复:

use warnings;
use strict;

my $s = '1.2.3.4';
my @parts = split /\./, $s; 
$s = join( "", @parts[0 .. $#parts-1] ) . '.' . $parts[$#parts];
printf "$s\n";
Run Code Online (Sandbox Code Playgroud)

  • 当'print`在那里过度使用`printf`就足够了. (2认同)
  • @SandraSchlichting不,正则表达式将找到一个字面时间段,并且前瞻将断言至少有一个文字句点在某个更远的地方.当断言失败时,您将找到最后一个句点. (2认同)