有没有办法在qw中保留一些空白?例如:
my @a=qw(1234 John Smith 123 Main St.);
将生成一个包含6个元素的数组。有没有办法,哦,我不知道......逃离白色空间保留一些吗?类似的东西:
my @a=qw(1234 John\ Smith 123\ Main\ St.);
返回3个元素:'1234','John Smith','123 Main St。'?
(仅供参考,我已尝试过以上内容,也有不同的报价组合,但都无济于事)
答案 0 :(得分:7)
要按换行符分隔:
my @a = split /\n/, <<'END';
1234
John Smith
123 Main St.
END
答案 1 :(得分:6)
不,您无法使用qw
保留空格。正如mpapec在评论中提到的那样,qw
用于引用单词。以下是一些替代方案:
my @a = ('1234', 'John Smith', '123 Main St.');
my $string = <<'END';
1234
John Smith
123 Main St.
END
my @a = split /\n/, $string;
my @a = <DATA>;
chomp @a;
__DATA__
1234
John Smith
123 Main St.
来自同一主题的Inline::Files来自dga。
免责声明:此模块是实验性的。请注意文档中的以下警告:
此模块可能会覆盖使用它的文件中的源代码。为了防止这种可能性,强烈建议您使用“安全第一”中描述的-backup选项。
如果你走这条路,要小心。
use Inline::Files;
my @a = <FOO>;
chomp @a;
my @b = <BAR>;
chomp @b;
__FOO__
1234
John Smith
123 Main St.
__BAR__
5678
Jane Doe
456 Anonymous Ln.
将数据硬编码到脚本中通常是一个坏主意,所以一般来说这就是我要去的路线。
data.txt中
1234
John Smith
123 Main St.
的MyScript
open my $fh, "<", "data.txt" or die $!;
my @a = <$fh>;
chomp @a;
close $fh;
data.csv
1234,"John Smith","123 Main St."
5678,"Jane Doe","456 Anonymous Ln."
的MyScript
use Text::CSV;
my $csv = Text::CSV->new() or die Text::CSV->error_diag();
open my $fh, "<", "data.csv" or die $!;
while (my $row = $csv->getline($fh)) {
# $row is an arrayref
}
$csv->eof or $csv->error_diag();
close $fh;
现在我只是在滑稽。我的观点是,这种猫的皮肤不止一种。
答案 2 :(得分:1)
如果您有大量此类记录,请从文本文件中读取它们并使用split()
获取记录的各个元素。如果输入文本文件没有正确的列分隔符,那么最好以某种方式修复输入文件(例如,通过修改首先生成它的程序)。如果您使用__DATA__
,则仍需要使列分隔符正确。我建议您使用制表符作为列分隔符,但您确定数据中不存在的任何字符都可以。
答案 3 :(得分:0)
有多种方法可以做到这一点。我最喜欢的是选择一个特定的转义序列来替换空格。例如currentprogress
:
_
或更精细的序列,如my @a = qw(A_B C);
y/_/ / for @a;
:
_SPACE_