嗯,我的代码非常简单。它应该打印内容+ \ n但结果却以某种方式反转。
这里是代码:
#!/usr/bin/perl -w
use strict;
my $founds;
while (<>){
$$founds{$2} = $& while m/([A-Z]{3})([a-z])([A-Z] {3})/g;
}
print sort keys %$founds, "\n";
结果是:
(here is a newline)
abcdefghijklmnopqrstuvwxyz
希望它也适用于您的配置(如果您要下载我在我的代码go here上使用的文件)
无论如何,你对此有所了解吗?
P.S:正则表达式不允许换行符,因此问题不太可能属于它。
答案 0 :(得分:7)
首先获得换行符的原因是由于缺少括号而将其包含在排序中。这样做:
print sort(keys %{$founds}), "\n";
换行首先是巧合(或者更确切地说,是因为在非空白之间是空白字符)。
澄清:
my %found = ( foo => 1, bar => 1 ); # keys returns "foo", "bar"
print sort keys %found, "\n"; # sort gets "foo", "bar", "\n"
# ^^^^^^^^^^^^^^^^^----------- arguments to sort()
答案 1 :(得分:-2)
perl中每个输入行的末尾都有换行符。你需要做chomp
作为你的while循环中的第一件事
use strict;
my $founds;
while (<>){
chomp;
$founds->{$2} = $& while m/([A-Z]{3})([a-z])([A-Z] {3})/g;
}
print sort keys %{$founds}, "\n";
你还应该使用 - &gt;访问引用的表示法,我会在括号中附加%dereference来帮助读取易读性