拆分字符串并附加第二个和第一个元素



我是perl脚本的新手。尝试以下代码

#!/usr/bin/perl -w
our $sep = "-";
open my $data, $ARGV[0] or die "Can't open $ARGV[0] for reading: $!";
while( my $line = <$data> )
{
$line =~ s/]:/n]:/g;
my @spl = split(', ', $line);
$hello = $spl[2].'-'.$spl[1];
print $hello;
print "n";
}

我的样本输入

, 1234, task]: 1122

当前输出

task
]: 1122
-1234

我的期望样本输出

task-1234]: 1122

期望的结果可以通过多种方式实现。也许在这种特殊情况下,拆分并不是最好的方法。

输入样例数据格式非常简单,可以用正则表达式进行处理。

use strict;
use warnings;
use feature 'say';
my($fname,$regex);
$regex = qr/^, (d+), (.+?)]: (d+)$/;
while( <DATA> )
{
next if /^s*$/;
my @data = $_ =~ /$regex/;
say "$data[1]-$data[0]]: $data[2]";
}
exit 0;
__DATA__
, 1234, task]: 1122

输出
task-1234]: 1122

注:将<DATA>替换为<>处理命令行

上指定的文件下面的代码示例使用分割来实现相同的结果

use strict;
use warnings;
use feature 'say';
while( <DATA> )
{
next if /^s*$/;
my @data = split(/[, ]:]+/, $_);
say "$data[2]-$data[1]]: $data[3]";
}
exit 0;
__DATA__
, 1234, task]: 1122

输出
task-1234]: 1122

你可以通过Google搜索Perl书架开始学习Perl,尽管这些书已经过时了,但它们仍然很有价值。

请查看下面的免费书籍以获得最新的编程风格

现代Perl

网上有很多免费的perl编程书籍。

我能解决这个问题,但是逻辑太差了

open my $stack, $ARGV[0] or die "Can't open $ARGV[0] for reading: $!";
while( my $line = <$stack> )
{
my @spl = split(']:', $line);
my @spl1 = split(', ', $spl[0]);
$line = $spl1[2].'-'.$spl1[1]."]:".$spl[1];
print $line;
print "n";
}

预期输出

task-1234]: 1122

相关内容

最新更新