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
;