0

是否可以foreach在 Perl 中有一个带有条件的循环?

我必须逐个字符地处理很多字符-foreach循环非常方便。请注意,我不能使用某些库,因为这是用于学校的。

如有必要,我可以使用条件编写一个for循环substr,但我想避免这种情况!

4

3 回答 3

6

你应该给我们看一些代码,包括你想做的事情

通常,字符串的逐个字符处理将在 Perl 中通过编写

for my $ch (split //, $string) { ... }

或者,如果更方便的话

my @chars = split //, $string;
for (@chars) { ... }

或者

my $i = 0;
while ($i < @chars) { my $char = $chars[$i++]; ... }

后一种形式可以支持while条件中的多个表达式。Perl 有很多不同的方法来做类似的事情,如果不了解你的问题,就不可能说哪种方法最适合你。


编辑

需要注意的是,这些方法都不允许修改原始字符串。如果这是您的意图,那么您必须使用s///,tr///substr

请注意,substr有第四个参数将替换原始字符串的指定部分。另请注意,它可以充当左值,因此可以进行赋值。换句话说

substr $string, 0, 1, 'X';

可以等价地写为

substr($string, 0, 1) = 'X';

如果split用于将字符串转换为字符列表(实际上是一个字符的字符串),则可以在此状态下对其进行修改并使用 重新组合为字符串join。例如

我的 @chars = 拆分 //, $string; $chars[0] = 'X'; $string = 加入'',@chars;

使用substr.

于 2012-05-19T21:50:21.500 回答
2

例如:

foreach my $l (@something) {
  last if (condition);
  # ...
}

如果条件为真,将退出循环

于 2012-05-19T21:13:38.983 回答
1

您可能会调查nextandlast指令。中的更多信息perldoc perlsyn

于 2012-05-19T21:11:15.403 回答