2014-03-06 121 views
0

我正在嘗試打印具有相應字母的數字的哈希值,我是新的,我不知道如何讓我的條件語句運行通過每個值我放在一個單一的用戶輸入線。我正在嘗試製作密碼。打印特定哈希值perl


#!/usr/bin/perl 
print "Enter the numbers for the corresponding letters\n"; 

chomp($num = <>); 
while ($num >= 0 && $num <= 27 || $num == 'c'){ 
%num_to_letter; 
$num_to_letter{"4"} = "A"; 
$num_to_letter{"9"} = "B"; 
$num_to_letter{"17"} = "C"; 
$num_to_letter{"5"} = "D"; 
$num_to_letter{"13"} = "E"; 
$num_to_letter{"7"} = "F"; 
$num_to_letter{"21"} = "G"; 
$num_to_letter{"6"} = "H"; 
$num_to_letter{"23"} = "I"; 
$num_to_letter{"15"} = "J"; 
$num_to_letter{"1"} = "K"; 
$num_to_letter{"20"} = "L"; 
$num_to_letter{"26"} = "M"; 
$num_to_letter{"19"} = "N"; 
$num_to_letter{"12"} = "O"; 
$num_to_letter{"2"} = "P"; 
$num_to_letter{"27"} = "Q"; 
$num_to_letter{"11"} = "R"; 
$num_to_letter{"25"} = "S"; 
$num_to_letter{"3"} = "T"; 
$num_to_letter{"22"} = "U"; 
$num_to_letter{"14"} = "V"; 
$num_to_letter{"18"} = "W"; 
$num_to_letter{"8"} = "X"; 
$num_to_letter{"24"} = "Y"; 
$num_to_letter{"16"} = "Z"; 
$num_to_letter{"10"} = " "; 

if ($num == 4){ 
    print "$num $num_to_letter{$num}"; 
    print $num_to_letter{"4"} = "A"; 

} 
elsif ($num == 9){ 
    print "$num $num_to_letter{$num}"; 
    print $num_to_letter{"9"} = "B"; 
} 
elsif ($num == 17){ 
    print $num $num_to_letter{$num}; 
    print $num_to_letter{"17"} = "C"; 
} 
elsif ($num == 5){ 
    print $num $num_to_letter{$num}; 
    print $num_to_letter{"5"} = "D"; 
} 
elsif ($num == 13){ 
    print $num $num_to_letter{$num}; 
    print $num_to_letter{"13"} = "E"; 
} 
elsif ($num == 7){ 
    print $num $num_to_letter{$num}; 
    print $num_to_letter{"7"} = "F"; 

} 
elsif ($num == 21){ 
    print $num $num_to_letter{$num}; 
    print $num_to_letter{"21"} = "G"; 
    } 
elsif ($num == 6){ 
    print $num $num_to_letter{$num}; 
    print $num_to_letter{"6"} = "H"; 

} 
elsif ($num == 23){ 
    print $num $num_to_letter{$num}; 
    print $num_to_letter{"23"} = "I"; 

} 
elsif ($num == 15){ 
    print $num $num_to_letter{$num}; 
    print $num_to_letter{"15"} = "J"; 


} 
elsif ($num == 1){ 
    print $num $num_to_letter{$num}; 
    print $num_to_letter{"1"} = "K"; 
    } 
elsif ($num == 20){ 
    print $num $num_to_letter{$num}; 
    print $num_to_letter{"20"} = "L"; 
} 
elsif ($num == 26){ 
    print $num $num_to_letter{$num}; 
    print $numto_letter{"26"} = "M"; 

} 
elsif ($num == 19){ 
    print $num $num_to_letter{$num}; 
    print $num_to_letter{"19"} = "N"; 
    } 
elsif ($num == 12){ 
    print $num $num_to_letter{$num}; 
    print $num_to_letter{"12"} = "O"; 

} 
elsif ($num == 2){ 
    print $num $num_to_letter{$num}; 
    print $num_to_letter{"2"} = "P"; 
    } 
elsif ($num == 27){ 
    print $num $num_to_letter{$num}; 
    print $num_to_letter{"27"} = "Q"; 

} 
elsif ($num == 11){ 
    print $num $num_to_letter{$num}; 
    print $num_to_letter{"11"} = "R"; 
} 

elsif ($num == 25){ 
    print $num $num_to_letter{$num}; 
    print $num_to_letter{"25"} = "S"; 
} 
elsif ($num ==3){ 
    print "$num $num_to_letter{$num}"; 
    $num_to_letter{"3"} = "T"; 
} 
elsif ($num == 22){ 
    print $num $num_to_letter{$num}; 
    $num_to_letter{"22"} = "U"; 
} 
elsif ($num == 14){ 
    print $num $num_to_letter{$num}; 
    $num_to_letter{"14"} = "V"; 
} 
elsif ($num == 18){ 
    print $num $num_to_letter{$num}; 
    $num_to_letter{"18"} = "W"; 
} 
elsif ($num == 8){ 
    print $num $num_to_letter{$num}; 
    $num_to_letter{"8"} = "X"; 
} 
elsif ($num == 24){ 
    print $num $num_to_letter{$num}; 
    $num_to_letter{"24"} = "Y"; 
} 
elsif ($num == 16){ 
    print $num $num_to_letter{$num}; 
    $num_to_letter{"16"} = "Z"; 
} 
elsif ($num == 10){ 
    print $num $num_to_letter{$num}; 
    $num_to_letter{"10"} = " "; 
} 
else{ 
    print "you didn't enter a jersey number we have stats on.\n";} 
chomp($num = <>); 
} 

回答

0

這不是我最好的Perl,但更接近你想要什麼,我認爲:

#!/usr/bin/perl 
use strict; 
use warnings; 

my %num_to_letter=(
    4 => "A", 
    9 => "B", 
    17 => "C" 
); 

my $num; 

print "Enter the numbers for the corresponding letters\n"; 

$num=0; 
while ($num >= 0 && $num <= 27 || $num == 'c'){ 
chomp($num = <>); 
    if(defined $num_to_letter{$num}){ 
     print $num_to_letter{$num},"\n"; 
    }else{ 
     print "Outta luck\n"; 
    } 
} 
0

你要提高你的技能的編碼。

我想你想調用時Perl腳本(即crypt.pl),這樣

$ perl crypt.pl 1 4 6 12 3 6 7 .. 

返回

K A H O T H F .. 

一個例子可能是下列之一:

#!/usr/bin/perl -w # ALWAYS start 
use warnings; # your scripts with 
use strict; # these three lines 

my %num_to_letter = (
    4 => "A", 
    9 => "B", 
    17 => "C", 
    5 => "D", 
    13 => "E", 
    7 => "F", 
    21 => "G", 
    6 => "H", 
    23 => "I", 
    15 => "J", 
    1 => "K", 
    20 => "L", 
    26 => "M", 
    19 => "N", 
    12 => "O", 
    2 => "P", 
    27 => "Q", 
    11 => "R", 
    25 => "S", 
    3 => "T", 
    22 => "U", 
    14 => "V", 
    18 => "W", 
    8 => "X", 
    24 => "Y", 
    16 => "Z", 
    10 => " " 
); # this could be a better way of 
# declaring and defining an hash content 

foreach my $num (@ARGV) { 
    print $num_to_letter{$num} . " "; 
} # here is how you get each value 

也許你想添加一些輸入驗證。

+0

在您的shebang中加入-w還有使用警告呼叫有什麼好處嗎?是不是後者足夠優越,因爲它也會接到明確的perl調用? 'perl myscript.pl' – Miller

+0

也許你是對的。無論如何,我不會貪心,所以我總是習慣於在每一個shebang的第一行放置'-w';) –