2017-11-27 10 views
2

他に働くにはどうすればいいですか?

私は、ユーザーがユーザー名を入力する必要があり、Perlプログラムを書きました。彼らはadminを入力した場合、彼らはメッセージ

Welcome, admin! 

を見るべきそうでない場合は、コンソール出力が

The username is incorrect 

ここに私のコードは

use utf8; 

print "Username: "; 

$username = <STDIN>; 

if ($username eq "admin") { 
    print "Welcome, admin!"; 
} 
else { 
    print "The username is incorrect."; 
} 

ですが、プログラムが進むどんなユーザーが入力する必要がありますブランチelseへ。

どうしてですか?

+4

あなたは 'admin'(' admin'と改行)を持っているので、 'chomp'を使ってください! – ikegami

答えて

3

Enterキーを押して改行を削除しないため、比較が成功することはありません。 chompを使用してください!

+0

私がchompを使用すると、私は 'Username:'メッセージを削除する必要があり、私はそれを望んでいません。 –

+0

@マテアス:そうではありません。どうしてそんなこと言うの? – Borodin

+0

@ボロディンうーん...これは私が思ったものです。私は理由を知らない... –

8

あなたは比較が失敗した理由を、あなたは変数に何があるか知っていることを確認してくださいわからないときはいつも:

use Data::Dumper; 
local $Data::Dumper::Useqq = 1; 
print Dumper $variable; 
# print Dumper \@array; 
# print Dumper \%hash; 

@ikegamiが提案のように、あなたがムシャムシャ食べるを使用する必要があります。

chomp $username; 

perldoc -f chomp

5

通常、空の<>演算子が入力に最適です。

どれ

なかった場合には、キーボードからコマンドラインで指定されたファイルからデータを読み込みますあなたの $username = <STDIN>キーボードから読み込みます、そしてあなたが adminを入力して キーを入力する場合、それは "admin\n"が含まれます。だから、入力すでに述べたように皆のように、この

use strict; 
use warnings 'all'; 

print "Username: "; 
my $user_name = <>; 
chomp $user_name; 

if ($user_name eq 'admin') { 
    print "Welcome, admin!\n"; 
} 
else { 
    print "The username is incorrect\n"; 
} 
+0

ありがとう。私は実際にchompが何をしているのか分からなかったようです。 –

+1

@MateaşMarioそれを1ライナーにするためのちょっとしたショートカットです:chomp(my $ user_name = ); –

0

のように、すべてのPerlプログラム

の開始時に

あなたがすべきもuse strictuse warnings 'all'の端からLF文字をchompする必要があります改行があり、chompはそれを並べ替えます。まれに、ユーザーがおそらくadminの前にスペースを入力すると、それでも失敗します。そのため、admin後にする前に、改行、スペースまたはタブが続くadminと一致し、スペースまたはタブであろう

use strict; 
use warnings 'all'; 

print "Username: "; 
my $user_name = <>; 
$user_name =~ s/^\s+|\s+$//g; 

if ($user_name eq 'admin') { 
    print "Welcome, admin!\n"; 
} 
else { 
    print "The username is incorrect\n"; 
} 

trim左右を使用することができます。

0

chompを使用しています。ユーザーがadminと入力したときはadmin\nに変換されているので、その\nを削除する必要があります。
chompは、\n(改行)に設定された変数(改行文字)$/を削除するために使用されます。 $/はデフォルトで入力レコード区切り文字、改行文字です。

use utf8; 

print "Username: "; 

$username = <STDIN>; 
chomp $username; 
if ($username eq "admin") { 
    print "Welcome, admin!"; 
} 
else { 
    print "The username is incorrect."; 
} 
関連する問題