Perl:反转文件中的每个单词
我正试图写一个脚本来反转文件中每行中的每个单词 之前:第1行asdasdfff 之后:1无fffdsadsa 使用:Perl:反转文件中的每个单词,perl,reverse,Perl,Reverse,我正试图写一个脚本来反转文件中每行中的每个单词 之前:第1行asdasdfff 之后:1无fffdsadsa 使用: @lines = split(/\s+/, reverse($old)); 错误在哪里?如果您的目标是将每个单词颠倒过来,那么将整行颠倒过来,然后将其拆分就是问题所在。因为颠倒整行会改变单词的顺序。所以你要么想要: my @lines = reverse split(/\s+/, reverse($old)); 或: 第一个只是简单地颠倒列表,第二个保持单词的顺序并颠倒每个单
@lines = split(/\s+/, reverse($old));
错误在哪里?如果您的目标是将每个单词颠倒过来,那么将整行颠倒过来,然后将其拆分就是问题所在。因为颠倒整行会改变单词的顺序。所以你要么想要:
my @lines = reverse split(/\s+/, reverse($old));
或:
第一个只是简单地颠倒列表,第二个保持单词的顺序并颠倒每个单词。根据我对需求的措辞,第二个看起来更像你想要做的。保留单词的位置,然后反转每个单词。这就是映射grep链的问题所在,它们是从右到左读取的,如果你愿意的话,会朝着指定的方向前进
所以,你想把线颠倒过来。从只包含一行的预期输出来看,这种情况并不清楚。如果$old是文件句柄,则不适合将其作为参数进行反转。您必须使用菱形运算符:
我把它们放在一个数组中,这样你就不会把整个文件倒过来,而把每一行数组作为一个单元放在一起。然后你需要把每一个单词颠倒过来,这样分开
map { map { reverse; } split /\s+/ } reverse( <$old> );
您可能希望将记录分隔符附加到每个组的末尾,因此需要捆绑每个单词的列表:
print map { chomp; (( map { reverse; } split /\s+/ ), $\ || $/ ) } reverse( <$old> );
因此,我们必须分离映射表达式,然后将当前定义的输出记录分隔符或输入记录分隔符添加到每个拆分和反转行 您可以在评估中使用替换:
s/(\S+)/reverse $1/ge for @lines;
这将捕获所有连续的非空白,并用反转版本替换它们。输入/输出示例:
I'm a little teapot short and stout
m'I a elttil topaet trohs dna tuots
foobar qwerty aboo
raboof ytrewq ooba
为什么我得到>848df3x0@Rocker:因为$old是一个文件句柄,而不是文件的内容。@Rocker,如果$old是一个文件句柄,您的第一个任务是反转行,那么您需要反转。表示读取下一条记录或列表中的所有记录。
map { chomp; map { reverse; } split /\s+/ } reverse( <$old> );
print map { chomp; (( map { reverse; } split /\s+/ ), $\ || $/ ) } reverse( <$old> );
s/(\S+)/reverse $1/ge for @lines;
I'm a little teapot short and stout
m'I a elttil topaet trohs dna tuots
foobar qwerty aboo
raboof ytrewq ooba