2013-03-14 6 views

답변

6

문제는 정규 표현식 아니지만, 당신은 파일 핸들을 사용하는 방법이 시도 :

를 그들은 그것이 아무것도 인쇄되지 않은 각 다른

#!/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); 

옆에있을 필요가 없습니다

while (<MYFILE>) { 
    print if /.*a.*e.*i.*o.*u.*/i; 
} 
+0

앞과 뒤의'. *'도 드롭 할 수있다. –

4

정규식이 좋다고 생각합니다. 오류는 파일에서 읽는 방법입니다. 또한, 귀하의 게시물에 댓글을 달았습니다. 그것이 실수인지 여부는 알 수 없습니다.

#!/usr/local/bin/perl 

use strict; 
use warnings; 

my $data_file = "words.txt"; 
open (my $MYFILE, "<", $data_file) or die "can't find file - $!"; 

while (my $line = <$MYFILE>) 
{ 
    chomp($line); 
    print "$line\n" if $line =~ m/.*a.*e.*i.*o.*u.*/i; 
} 

close ($MYFILE); 

당신은 항상 use strict;use warnings;해야한다. 3 인자 버전의 open을 사용하여 읽기 전용으로 지정해야합니다.

+2

+1은'use strict'와'use warnings'에 +1합니다. 내가 할 수 있다면 + 1k. 이 네 단어를 추가하면 많은 수수께끼의 펄 버그가 분명해집니다. –

+0

@ NathanielWaisbrot 사실입니다 :). – squiguy

0

은 내가했을 것 :

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

사용 펄 스위스 군용 나이프로.

사실, 난했을 : 다음

% 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')는 터미널에 쓰지 않을 때 pass-thru의 역할을합니다.

이 스타일은 프로그램을 한 번에 한 단계 씩 개발하므로 각 단계에서 결과를 볼 수 있습니다.

0

MYFILE이 목록 컨텍스트에 있습니다. m //을리스트에 적용하면 MYFILE의 스칼라 컨텍스트에서 작동합니다.