我对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发布于 2022-11-22 09:40:30
所期望的结果可以在许多方面实现。在这种特殊情况下,拆分可能不是最好的方法。
输入样本数据格式非常简单,可以用regex进行处理。
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编程书籍。
发布于 2022-11-22 09:28:18
我能解决它,但逻辑太糟糕了。
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]: 1122https://stackoverflow.com/questions/74529783
复制相似问题