Perl:在if-else语句中接受用户输入

时间:2012-07-13 20:01:01

标签: perl input if-statement

我接受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;

请帮忙

4 个答案:

答案 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)");
}