我接受If-Else块中的用户输入。检查代码:
if ( $svr == 1 ) {
print "Enter Datbase Name\n";
my $db = <>;
chomp($db);
} elsif ( $svr == 2 ) {
print "Enter Data Source Name (DSN)\n";
my $db = <>;
chomp($db);
}
当我在后面的语句中引用$ db时,我收到以下错误:
“使用未初始化的值$ db”
这是我使用$ db导致错误的声明:
my $data_source = 'DBI:mysql:' . $db . ':' . $host;
请帮忙
答案 0 :(得分:5)
第一个$db
的范围限定为“then”块,第二个$db
的范围限定为“else”块。您需要在$db
之前声明if
var。
my $db;
if($svr==1) {
print "Enter Datbase Name\n";
$db=<>;
chomp($db);
} elsif($svr==2) {
print "Enter Data Source Name (DSN)\n";
$db=<>;
chomp($db);
}
答案 1 :(得分:2)
在if / else块之外定义$db
。通过在块内部定义它,您可以将变量的范围限制为这些块:
my $db;
if($svr==1) {
print "Enter Datbase Name\n";
$db=<>;
chomp($db);
} elsif($svr==2) {
print "Enter Data Source Name (DSN)\n";
$db=<>;
chomp($db);
}
答案 2 :(得分:2)
my
语句在范围内声明一个变量,即花括号。它没有在外面定义。如果将my $db
放在if / else块之外,它应该可以工作。如果没有通用范围,则必须使用our
将其设为全局变量。有关详细信息,请参阅perldoc -f my
。
答案 3 :(得分:1)
你有答案,但除非有更多我没有看到的逻辑,否则你可能会让自己变得更容易......
if($svr==1) {
print "Enter Datbase Name\n";
} elsif($svr==2) {
print "Enter Data Source Name (DSN)\n";
}
my $db=<>;
chomp($db);
甚至
print $svr==1 ? "Enter Datbase Name\n" : "Enter Data Source Name (DSN)\n";
my $db=<>;
chomp($db);
这不仅仅是化妆品。不要重复自己(DRY)很重要,因为在将来,如果你需要改变某些东西,你可能不记得在每个位置都改变它。这是编写优秀代码的积极步骤。
如果if语句中有更多逻辑,请尝试类似
的内容sub prompt {
my $question = shift;
print $question . "\n";
my $response = <>;
chomp $response;
return $response;
}
my $db;
if($svr==1) {
$db = prompt("Enter Datbase Name");
} elsif($svr==2) {
$db = prompt("Enter Data Source Name (DSN)");
}