3

ファイルからデータを読み取り、すべての小文字の母音('a'、'e'、'i'、'o'、'u')を含む単語(1行に1つ)を順番に出力しようとしています。彼らは隣同士である必要はありません

#!/usr/local/bin/perl
#$data_file = "words.txt;
open (MYFILE, $data_file) or die "can't find file - $!";

while (<MYFILE> =~ m/.*a.*e.*i.*o.*u.*/i)
{
    print "$_";
}

close(MYFILE);

何も印刷していません:/

4

4 に答える 4

0

MYFILE はリスト コンテキストにあります。したがって、m// をリストに適用すると、MYFILE のスカラー コンテキストに作用します。

于 2013-03-16T08:17:52.047 に答える
0

私はしただろう:

% perl -ne 'print if /a.*e.*i.*o.*u/' < words.txt

Perl をスイス アーミー ナイフとして使用します。

実際、私はやったでしょう:

% cat words.txt | perl -ne 'print if /.*/' | head

次に、words.txt の最初の 10 行を表示すると、次のようになります。

% cat words.txt | perl -ne 'print if /a/' | head

それで

% cat words.txt | perl -ne 'print if /a.*e/' | head

:

% cat words.txt | perl -ne 'print if /a.*e.*i.*o.*u/' | head
% cat words.txt | perl -ne 'print if /a.*e.*i.*o.*u/' | less
% cat words.txt | perl -ne 'print if /a.*e.*i.*o.*u/' | less > results.txt

トリビアとして、「less」(および「more」) は、端末に書き込みを行っていないときはパススルーとして機能することに注意してください。

このスタイルでは、一度に 1 ステップずつプログラムを開発し、各ステップで結果を確認できます。

于 2013-03-14T18:45:35.210 に答える