Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/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 将多行字符串转换为数组_Perl - Fatal编程技术网

Perl 将多行字符串转换为数组

Perl 将多行字符串转换为数组,perl,Perl,如何将多行字符串转换为数组 my $text= " ads da sda s da d as das d a as dasd \n "; 注意:我不想删除或删除换行?就目前情况而言,问题的措辞可以更清楚 my @text = split "\n", $text; 请记住,split的第一个参数是一个模式: #!/usr/bin/perl use strict; use warnings; use YAML; my $text = " ads da sda s da d as da

如何将多行字符串转换为数组

my $text= " ads da
sda
s 
da
d
as

das
d a as dasd
\n

";

注意:我不想删除或删除换行?

就目前情况而言,问题的措辞可以更清楚

my @text = split "\n", $text;

请记住,
split
的第一个参数是一个模式:

#!/usr/bin/perl

use strict; use warnings;
use YAML;

my $text = " ads da
sda
s
da
d
as

das
d a as dasd
\n

";

print Dump [ split /(\n)/, $text ];
输出:

--- - ' ads da' - "\n" - sda - "\n" - s - "\n" - da - "\n" - d - "\n" - as - "\n" - '' - "\n" - das - "\n" - d a as dasd - "\n" - '' - "\n" - '' - "\n" - '' - "\n" --- -“爸爸的广告” -“\n” -sda -“\n” - -“\n” -da -“\n” -d -“\n” -作为 -“\n” - '' -“\n” -达斯 -“\n” -d a作为dasd -“\n” - '' -“\n” - '' -“\n” - ''
-“\n”您可以使用
^
元字符和
m
regexp修饰符(让
^
匹配行的开头,而不仅仅是字符串的开头)在行的开头进行拆分:

实际上,您可以省略
m
,因为在这种情况下
split
为您添加了它。从
perldoc-f split
:“将“/^/”模式视为“/^/m”,因为它在其他情况下没有多大用处。”

使用
$text
的值,此代码:

use Data::Dumper;
$Data::Dumper::Useqq=1;
print Data::Dumper->Dump([[split /^/, $text]], ["*text"]);
打印此文件:

@text = (
          " ads da\n",
          "sda\n",
          "s \n",
          "da\n",
          "d\n",
          "as\n",
          "\n",
          "das\n",
          "d a as dasd\n",
          "\n",
          "\n",
          "\n"
        );

我的感觉是你把注意力放在了错误的问题上

与尝试将标量多行字符串常量转换为列表不同,您的问题可能应该是“如何将多行字符串初始化为Perl列表或数组?”

请看Perl在中的应用

特别适用于您的问题的是如何使用heredoc启动具有多行字符串的数组:

#!/usr/bin/perl
use strict; use warnings;
use YAML;

my @text= <<END =~ m/(^.*\n)/mg;
 ads da
sda
s 
da
d
as

das
d a as dasd
\n

END

print Dump \@text;

使用成语Luke

我很高兴把这个放在一起:瞧!您的字符串现在是一个没有拆分的数组-拆分它:

使用严格的qw;
使用警告;
@{ads da
sda
s
da
D
像
达斯
d a作为dasd
\n
"} = 1..3
;

这是一个糟糕的问题。更清楚地定义您的范围。字符串包含什么?那是文字
'\n'
?你想忽略空行吗?我不想删除新行和空行…那么你想拆分什么?我从来没有说过我想拆分。我需要把字符串转换成数组你说的“转换”是什么意思?显示您想要的数组在示例中的外观。Downvoter(s):是否愿意解释此答案的错误?这是具有固定宽度文本字段的字符串列表的最佳解决方案
split“\n”
捕获的行数不如我通过
curl
获得的html内容字符串上的
split/^/
多。我猜这是因为字符串包含混合的CR和LF字符。
#!/usr/bin/perl
use strict; use warnings;
use YAML;

my @text= <<END =~ m/(^.*\n)/mg;
 ads da
sda
s 
da
d
as

das
d a as dasd
\n

END

print Dump \@text;
---
- " ads da\n"
- "sda\n"
- "s \n"
- "da\n"
- "d\n"
- "as\n"
- "\n"
- "das\n"
- "d a as dasd\n"
- "\n"
- "\n"
- "\n"
use strict qw<subs vars>;
use warnings;

@{" ads da
sda
s 
da
d
as

das
d a as dasd
\n
"} = 1..3
;