在Perl中创建多行变量
下面是我的另一个问题 我有以下代码,我逐行读取网页内容,尝试匹配某个模式,如果匹配,则将其写入文件:在Perl中创建多行变量,perl,variables,Perl,Variables,下面是我的另一个问题 我有以下代码,我逐行读取网页内容,尝试匹配某个模式,如果匹配,则将其写入文件: foreach my $line (split qr/\R/, $mech->content) { if ($line=~ m/t\/([A-Z]+)/){ print $fileHandle "$1\n"; } } 我想知道是否可以将匹配的行附加到另一个多行变量,并仅在循环完成时将其写入文件 我之所以希望如此,是因为我希望使用以下子例
foreach my $line (split qr/\R/, $mech->content) {
if ($line=~ m/t\/([A-Z]+)/){
print $fileHandle "$1\n";
}
}
我想知道是否可以将匹配的行附加到另一个多行变量,并仅在循环完成时将其写入文件
我之所以希望如此,是因为我希望使用以下子例程将数据保存到文件中,而不是直接执行此操作:
writeToFile("fileName.tmp","path",data);
这是我编写的一个子例程,它除了将数据保存在文件中外,还检查以下内容:
因此,如果我能够创建这个附加变量,我将少写一个文件到磁盘。这很简单-您可以使用
=
运算符(这是组合赋值(=
)和串联(
)来追加字符:
这很简单-您可以使用
=
运算符(即组合赋值(=
)和串联(
)来追加字符:
$data .= "$1\n";
# Same as $data = $data . "$1\n";
映射的魔力来构建多行字符串,而不需要循环或if
:
my $data = join "",
map { /t\/([A-Z]+)/ ? "$1\n" : "" }
split(qr/\R/, $mech->content);
/g
修饰符允许正则表达式一次又一次地匹配),并将整个循环替换为仅3行:
my $data = $mech->content();
$data =~ s/t\/([A-Z]+)/$1\n/g;
writeToFile("fileName.tmp", "path", $data);
$data .= "$1\n";
# Same as $data = $data . "$1\n";
映射的魔力来构建多行字符串,而不需要循环或if
:
my $data = join "",
map { /t\/([A-Z]+)/ ? "$1\n" : "" }
split(qr/\R/, $mech->content);
/g
修饰符允许正则表达式一次又一次地匹配),并将整个循环替换为仅3行:
my $data = $mech->content();
$data =~ s/t\/([A-Z]+)/$1\n/g;
writeToFile("fileName.tmp", "path", $data);
open(my $fileHandle, ...) or ...;
...
print $fileHandle "$1\n";
与
将输出附加到字符串而不是发送到文件句柄。只需替换即可
open(my $fileHandle, ...) or ...;
...
print $fileHandle "$1\n";
与
将输出附加到字符串,而不是将其发送到文件句柄。我将从中删除。我想这不会有任何魔力(但我不知道),我将从中删除。我想这不会有任何魔力(但我不知道)谢谢你的回答。你能解释一下为什么需要最后一个
(在$line
之后)吗?@EugeneS-在他的代码中,它需要作为串联运算符。就我个人而言,在我们公司,我总是采用插值而不是串联的方式,例如,“$line\n”
比$line更好。”\n
以我的经验,风格wise@DVK因此,
只是连接行?@EugeneS-.连接任何字符串。$line.\n“
只是将字符串与换行符连接起来。谢谢您的回答。您能解释一下为什么需要最后一个
(在$line
之后)吗?@EugeneS-在他的代码中,它是作为串联运算符需要的。就我个人而言,在我们公司,我总是采用一种在串联上使用插值的方式,例如,“$line\n”
比$line更好。“\n”
以我的经验,风格wise@DVK因此,
只是连接行?@EugeneS-.连接任何字符串。$line.\n“
只是将字符串与换行符连接起来。非常感谢您的详细回答。您能解释一下表达式(数字3)的输出方式吗可以存储到变量/写入文件吗?@EugeneS-请参阅我的更新。表达式3的“输出”只是原始变量本身-正则表达式在Perl中替换为“就地”。女士们,先生们,#3是Perl好的原因。非常感谢您的详细回答。您能解释一下表达式(数字3)的输出方式吗可以存储到变量/写入文件吗?@EugeneS-请参阅我的更新。表达式3的“输出”只是原始变量本身-正则表达式在Perl中替换为“就地”。女士们先生们,Perl之所以好是因为#3。