Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl qw中的保白空间_Perl - Fatal编程技术网

Perl qw中的保白空间

Perl qw中的保白空间,perl,Perl,有没有办法在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.” (仅供参考,我尝试了上述方法,也尝试了不同的引号组合,但均无效)如果您有大量此类记录,请从文本文件中读取它们,然后使

有没有办法在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.”


(仅供参考,我尝试了上述方法,也尝试了不同的引号组合,但均无效)

如果您有大量此类记录,请从文本文件中读取它们,然后使用
split()
获取记录的各个元素。如果您的输入文本文件没有合适的列分隔符,那么您最好以某种方式修复输入文件(例如,通过修改最初生成该文件的程序)。如果使用
\uuuuuuuuuuuuuuuuuuuuu
,仍然需要正确使用列分隔符。我建议您使用制表符作为列分隔符,但您确定数据中不存在的任何字符都可以。

不,您不能使用
qw
保留空白。正如mpapec在评论中提到的,
qw
用于引用单词。以下是一些备选方案:

简单数组 埃雷多克+斯普利特 myscript

myscript

使用Text::CSV;
我的$csv=Text::csv->new()或die Text::csv->error_diag();

打开my$fh,“以换行符分隔:

my @a = split /\n/, <<'END';
1234
John Smith
123 Main St.
END

my@a=split/\n/,有多种方法。我最喜欢的是选择一个特定的转义序列来替换空格。例如
\u

my @a = qw(A_B C);
y/_/ / for @a;
或者更精细的序列,如
\u SPACE\u

my @a = qw(A_SPACE_B C);
s/_SPACE_/ /g for @a;

qw
=>
引用单词而不是空格。你可以
my@a=split/-/,q(1234 John Smith-123-Main St.);
为什么不使用简单数组?
my@a=('1234','John Smith','123 Main St.);
只需将IFS更改为不包含“空格”的内容,并相应地更改脚本的其余部分即可[当IFS不同时,行上的许多处理方式会有所不同]。您可以“还原”原始IFS[但在更改之前,您需要将其保存在另一个变量中,然后从该另一个变量还原]一旦你不再需要它不同了。@foibs,这是一个过于简单的例子。我真的会使用一个qw,它有几十个条目,由换行符分隔,等等。重复这样做,将意味着大量键入引号、逗号和其他标点符号。所以像纯标量字符串一样存储它,并用换行符分割。如果S是bash variab在Perl中没有直接等价物(请参见中的
$/
$\
)。请不要在回答中对其他用户发表评论(这就是评论的目的)。
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.
1234
John Smith
123 Main St.
open my $fh, "<", "data.txt" or die $!;

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

close $fh;
1234,"John Smith","123 Main St."
5678,"Jane Doe","456 Anonymous Ln."
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;
my @a = split /\n/, <<'END';
1234
John Smith
123 Main St.
END
my @a = qw(A_B C);
y/_/ / for @a;
my @a = qw(A_SPACE_B C);
s/_SPACE_/ /g for @a;