如何才能将qw()的行为更改为换行符?

时间:2015-07-15 13:57:32

标签: perl

我的代码如下:

my @street = qw(
examplestreet
example street
);
foreach my $str (@street) {
    print "$str\n";
}

输出显然是

examplestreet
example
street

但我希望它是

examplestreet
example street

问题:我是否可以修改qw()的行为,以便它只用换行符分隔,而不是用空格分隔?

PS: 为什么我这样做:获得了大量条目,并且将它们逐行复制粘贴到代码中是最简单的。它只是一个小小的剪辑,不值得任何努力。如果我找不到解决方案,我会为数据制作单独的文件并将其读入脚本。但捷径会很棒! (或者我应该尝试使用__DATA__吗?不知道如何实现这一目标......)当前的Perl是v5.20.1

2 个答案:

答案 0 :(得分:10)

您无法更改qw的行为,但您可以改用HERE文档:

my @streets = split /\n/, << '__LINES__';
examplestreet
example street
__LINES__

print "<$_>\n" for @streets;

HERE文档始终是一个字符串,因此您必须在换行符上split

也可以使用DATA,但前提是只需要一个这样的部分(并且您不想使用Data::Section):

my @streets = <DATA>;
chomp @streets;  # This time, we have to remove the newlines from the strings.
print "<$_>\n" for @streets;

__DATA__
examplestreet
example street

答案 1 :(得分:3)

您还可以从字符串逐行阅读:

#!/usr/bin/env perl

use strict;
use warnings;

my $streets = <<EO_STREETS;
examplestreet
example street
EO_STREETS

open my $in, '<', \$streets
    or die "Cannot read from string buffer";

while (my $street = <$in>) {
    $street =~ s/\s+\z//; # just in case
    print "Street: '$street'\n";
}

close $in;

split heredoc相比,这确实有减少脚本内存占用的优势。