Perl的的foreach与字符串参数

问题描述 投票:1回答:4

perldocs文档只表明qazxsw POI循环“遍历一个正常的列表值” qazxsw POI,但我有时会看到他们与字符串参数,如下面的例子:

foreach

是指通过这样的字符串的行为?另外,为什么从例如路过一个backticked命令返回的字符串和文本字符串,因为不同的结果?

perl
4个回答
5
投票

在标量上下文,反引号返回包含封闭命令的所有输出的单个标量。但https://perldoc.perl.org/perlsyn.html#Foreach-Loops评估在列表环境反引号,这将输出到一个列表,每个元件的一行分隔。


3
投票

现在的问题是围绕foreach (`curl example.com 2>/dev/null`) { # iterates 50 times } foreach ("foo\nbar\nbaz") { # iterates just 1 time. Why? } ,在Perl的很多事情的关键概念。

foreach (...)循环需要一个列表来遍历,所以它强加列表背景下构建你看到文档中提到的context。该列表可以用文字,foreach来形成,并且可以具有一种元素;这是你的第二个例子,其中一个字符串给出,形成被重复过的一个元素列表。

该列表还可以来自一个表达式,在列表中的上下文被评估;这是你的第一个例子。许多操作产生基于上下文的不同回报,list values是这样的暴民的答案解释的操作。这是一些需要注意和小心。表达也可以返回上下文的单个值,而不管;那么它只是用来填充列表。


1
投票

qw(a b c)

在列表环境中,返回线路(但是你定义线/使用$或INPUT_RECORD_SEPARATOR $)列表,或者一个空列表,如果该命令失败。

qx

复合语句

[...]

LABEL的foreach VAR(LIST)BLOCK


-2
投票

字符串是不是列表。如果你想字符遍历字符串中的你需要

perldoc -f qx

我想你可能与Python会混淆的Perl:

perldoc perlsyn

如由其他的答案反引号指出/ foreach my $character (split('', "foo\nbar\nbaz")) { 从被执行的命令在列表上下文返回的输出线的列表。

© www.soinside.com 2019 - 2024. All rights reserved.