0

foreachPerlで条件付きのループを持つことは可能ですか?

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

元の文字列の指定された部分を置き換えるsubstr4 番目のパラメーターがあることに注意してください。また、左辺値として機能するため、代入を受け取ることにも注意してください。言い換えると

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

と同等に書くことができます

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

splitを使用して文字列を文字のリスト (実際には 1 文字の文字列) に変換すると、この状態で変更し、 を使用して文字列に再結合できますjoin。例えば

my @chars = split //, $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

nextlastディレクティブを調べることができます。詳細については、をご覧くださいperldoc perlsyn

于 2012-05-19T21:11:15.403 に答える