我在使用 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";
我做错了什么?
if [
是一种 shell 语法。在 Perl 中,你应该使用
if (...) {
此外,
=
是赋值运算符。对于字符串相等,请使用 eq
:
if ($status eq 'y') {
print "YAY\n";
在比较之前,您应该
chomp
$status 就像您已经在咀嚼 $name 一样。
另请注意,
Y
和 y
不相等。
此外,你的第一行(“shebang”)错过了起始斜杠:
#! /usr/bin/perl
if [ $status = "y" ]: then
这(几乎)是 Bourne(或 bash)shell 语法(除了
:
应该是 ;
)。等效的 Perl 代码是:
if ($status eq "y") {
# ...
}
eq
是字符串的相等比较; ==
比较数字。
(您做错的另一件事是没有在问题中包含错误消息。)
例如:
$status = <STDIN>;
chomp $status;
if ($status eq "y") {
print "YAY! I knew you would like it!\n";
}
您还可以采取其他一些措施来改进 Perl 代码。例如,您应该始终拥有:
use strict;
use warnings;
靠近源文件的顶部(这将需要声明变量,可能使用
my
)。我建议先让这个程序运行起来,然后再担心这个问题,但这绝对是您长期想要做的事情。
首先,始终,始终将
use strict;
和 use warnings;
放在程序的顶部。这将捕获各种错误,例如在 =
语句中使用 if
。 =
设置变量的值。 ==
测试数字相等性,eq
测试字符串相等性。
这是您重写的程序。第一行带有
#!
在 PATH 中搜索可执行 Perl。这样,你就不用担心 Perl 是在 /usr/bin/perl
还是 /bin/perl
或者 /usr/local/bin/perl
。
#! /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!";
}
更好的方法可能是检查输入是否以
y
开头:
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;
所需要的,并且会发现很多编程错误。请注意,say
就像 print
,但我不必继续将 \n
放在末尾。