foreach
Perlで条件付きのループを持つことは可能ですか?
foreach
ループが非常に便利な場合、文字処理ごとに多くの文字を実行する必要があります。学校用のため、一部の図書館は利用できませんのでご注意ください。
for
必要に応じて条件付きでループを書くこともできますが、substr
避けたいです!
あなたがやりたいことの種類を含めて、いくつかのコードを私たちに見せてください。
一般に、文字列の文字単位の処理は、次のように 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
4 番目のパラメーターがあることに注意してください。また、左辺値として機能するため、代入を受け取ることにも注意してください。言い換えると
substr $string, 0, 1, 'X';
と同等に書くことができます
substr($string, 0, 1) = 'X';
split
を使用して文字列を文字のリスト (実際には 1 文字の文字列) に変換すると、この状態で変更し、 を使用して文字列に再結合できますjoin
。例えば
my @chars = split //, $string; $chars[0] = 'X'; $string = 結合 '', @chars;
を使用して、上記のコードと同様のことを行いますsubstr
。
例えば:
foreach my $l (@something) {
last if (condition);
# ...
}
条件が真の場合、ループを終了します
next
とlast
ディレクティブを調べることができます。詳細については、をご覧くださいperldoc perlsyn
。