在qw中保留白色空间

msw*_*erg 5 perl

有没有办法在qw中保留一些空白?例如:

my @a=qw(1234 John Smith 123 Main St.);
Run Code Online (Sandbox Code Playgroud)

将生成一个包含6个元素的数组.有没有办法,哦,我不知道......逃离白色空间保留一些吗?就像是:

my @a=qw(1234 John\ Smith 123\ Main\ St.);
Run Code Online (Sandbox Code Playgroud)

返回3个元素:'1234','John Smith','123 Main St.'?

(仅供参考,我已尝试过以上内容,也有不同的报价组合,但都无济于事)

yst*_*sth 7

要按换行符分隔:

my @a = split /\n/, <<'END';
1234
John Smith
123 Main St.
END
Run Code Online (Sandbox Code Playgroud)


Thi*_*Not 6

不,你不能保留空格qw.正如mpapec在评论中提到的那样,qw用于引用单词.以下是一些替代方案:

简单的数组

my @a = ('1234', 'John Smith', '123 Main St.');
Run Code Online (Sandbox Code Playgroud)

Heredoc +分裂

my $string = <<'END';
1234
John Smith
123 Main St.
END

my @a = split /\n/, $string;
Run Code Online (Sandbox Code Playgroud)

__数据__

my @a = <DATA>;
chomp @a;

__DATA__
1234
John Smith
123 Main St.
Run Code Online (Sandbox Code Playgroud)

带有Inline :: Files的多个__DATA__区域

来自同一主题的PerlMonks线程的信用转到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.
Run Code Online (Sandbox Code Playgroud)

外部平面数据文件

将数据硬编码到脚本中通常是一个坏主意,因此通常这是我要去的路线.

data.txt中

1234
John Smith
123 Main St.
Run Code Online (Sandbox Code Playgroud)

的MyScript

open my $fh, "<", "data.txt" or die $!;

my @a = <$fh>;
chomp @a;

close $fh;
Run Code Online (Sandbox Code Playgroud)

外部CSV

data.csv

1234,"John Smith","123 Main St."
5678,"Jane Doe","456 Anonymous Ln."
Run Code Online (Sandbox Code Playgroud)

的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;
Run Code Online (Sandbox Code Playgroud)

关系型数据库???

现在我只是在滑稽.我的观点是,这种猫的皮肤不止一种方法.