2014-10-31 1 views
1

Perl에서 예/아니오로 질문하는 데 어려움이 있으며 방금 알아낼 수 없습니다. 나는 이것에 멍청한 사람이다. 내가 잘못 뭐하는 거지Perl에 문제가있는 경우

#! usr/bin/perl 

print "Hello there!\n"; 
print "What is your favorite game?\n"; 
$name = <STDIN>; 
chomp $name; 
print "That's awesome! $name is my favorite game too!\n"; 

print "Do you think this is a fun script (Y/n) \n"; 
$status = <STDIN>; 
if [ $status = "y" ]: then 

print "YAY! I knew you would like it!\n"; 

if [ $status = "n" ]: then 

print "You suck, not me!\n"; 

?

+1

Perl if 문에서 대괄호를 사용하여 조건을 묶지 않으면 괄호를 사용합니다. 그들은 또한'then' 키워드를 사용하지 않습니다. –

답변

4

if [은 쉘 구문입니다. Perl에서는 사용해야합니다.

if (...) { 

또한 =은 할당 연산자입니다. 문자열 평등를 들어, eq를 사용

if ($status eq 'y') { 
    print "YAY\n"; 

비교하기 전에, 당신은 같은 방법으로 당신은 이미 $ 이름을 chomp $ 상태를 받기를 갈망하고 있습니다.

또한 Yy은 같지 않습니다.

또한, 첫 번째 ("오두막") 라인은 시작 슬래시를 벗어났습니다 :

#! /usr/bin/perl 
+0

내가 말했듯이, 나는 멍청한 행동이다. –

+0

@ysth : 감사합니다. – choroba

2
if [ $status = "y" ]: then 

Bourne (또는 bash) 셸 구문입니다. 등가 펄 코드 :

if ($status eq "y") { 
    # ... 
} 

eq 문자열 평등 비교이고; ==은 숫자를 비교합니다.

(당신이 당신의 문제의 오류 메시지가 포함되지 않은 잘못하고있는 다른 것은.) 예를 들어

:

$status = <STDIN>; 
chomp $status; 
if ($status eq "y") { 
    print "YAY! I knew you would like it!\n"; 
} 

당신이 당신의 펄을 개선하기 위해 할 수있는 몇 가지 다른 것이있다 암호. 예를 들어, 당신은 항상이 있어야합니다 (my와 아마 당신의 변수 선언이 필요합니다) 소스 파일의 상단에

use strict; 
use warnings; 

합니다. 이 프로그램에 대해 걱정하기 전에 먼저이 프로그램을 사용하는 것이 좋겠지 만, 장기적으로는 원하는 프로그램 일 것입니다.

+0

당신의 솔루션에 대한 나의 코드 예제를 줄 수 있겠습니까? 나는 그것을 고치려고했지만 의도 한 것 대신에 두 응답을 보여줍니다. –

+0

@StrategyFirst : 업데이트 된 답변보기. –

1

는 첫째, 항상, 항상 프로그램의 상단에 use strict;use warnings;을 넣어. 이 경우 을 if 문에 사용하는 등 모든 종류의 오류가 발생합니다. =은 변수의 값을 설정합니다. ==은 숫자 동등성을 테스트하고 eq은 문자열 동등성을 테스트합니다.

다음은 프로그램을 다시 작성한 것입니다. #!이있는 첫 번째 행은 PATH에서 실행 가능한 Perl을 검색합니다. 이렇게하면 Perl이 /usr/bin/perl 또는 /bin/perl 또는 /usr/local/bin/perl에 있는지 걱정할 필요가 없습니다.입력이 y 여부 시작 여부를

#! /usr/bin/env perl 
use strict; 
use warnings; 
use feature qw(say); # Allows the use of the "say" command 

say "Hello there!"; 
print "What is your favorite game? "; 
my $name = <STDIN>; 
chomp $name; 
say "That's awesome! $name is my favorite game too!"; 

print "Do you think this is a fun script (Y/n) \n"; 
my $status = <STDIN>; 
chomp $status; 
if ($status eq "y") { 
    say "Yay! I knew you would like it!"; 
} 
elsif ($status eq "n") { 
    say "You suck, not me!"; 
} 

더 좋은 방법은 확인 될 수있다 :

if ($status =~ /^y/i) { # Did it start with a 'y' or 'Y'? 
    say "Yay! I knew you would like it!"; 
else { 
    say "You suck, not me!"; 
} 

my의 사용은 변수를 선언 할 수 있습니다. 이것은 use strict;이 필요하며 많은 프로그래밍 실수를 범합니다. sayprint과 비슷하지만 끝 부분에 \n을 계속 두지 않아도됩니다.

+0

매우 유용합니다! 당신이 겪은 모든 고마움에 감사드립니다. :) –

+0

@ysth - oops! 수정 됨. –

+0

@ysth 실제로'chomp (my $ var = ); '를 사용하는 것을 선호합니다. 이 것을 계속 사용하면 _natural_를 사용할 수있는 구문을 만들고, 나는 읽기에'chomp'하는 것을 잊지 않습니다. 그러나 사람들에게는 혼란 스러울 수 있으므로 여기에서는 별도의'chomp'를 사용하는 경향이 있습니다. –