如果不进行评估,则使用Perl
有人看到这个代码有什么问题吗?当我们(在Linux上)执行它时,会直接进入“Error:Unknown host”块 Perl是5.8.6版如果不进行评估,则使用Perl,perl,string,flow-control,Perl,String,Flow Control,有人看到这个代码有什么问题吗?当我们(在Linux上)执行它时,会直接进入“Error:Unknown host”块 Perl是5.8.6版 $hostname = "host2"; if ($hostname eq "host1") { $dbhost = 'dbi:Oracle:dbhost1'; } elsif ($hostname eq "host2") { $dbhost = 'dbi:Oracle:dbhost2'; } elsif ($hostname eq "host3
$hostname = "host2";
if ($hostname eq "host1") {
$dbhost = 'dbi:Oracle:dbhost1';
}
elsif ($hostname eq "host2") {
$dbhost = 'dbi:Oracle:dbhost2';
}
elsif ($hostname eq "host3" || $hostname eq "host4") {
$dbhost = 'dbi:Oracle:dbhost3';
}
else {
print "ERROR: UNKNOWN HOST\n";
die "Can't connect";
}
你的代码没有问题。它按照我的预期执行。您的代码没有问题。它按照我的预期执行。代码没有问题。但是,使用查找表会更简单(也更灵活):
PS:您是否忘记了
咀嚼$hostname
?代码没有问题。但是,使用查找表会更简单(也更灵活):
PS:你忘了
咀嚼$hostname
了吗?在我看来还行,在5.8.9上运行良好。您正在使用哪个版本的perl?在“这是为x86_64-linux-gnu-thread-multi构建的perl,v5.10.1(*)下(Ubuntu 10.04.1 LTS)对我有效。您的确切主机是什么,perl版本,这是完整的代码吗?您确定生产代码中定义了$hostname
?您是否正在运行使用警告;严格使用代码>?您确定$hostname
没有多余的空格吗?您是否已删除$hostname变量中所有不可见的字符?在我看来还可以,在5.8.9上运行良好。您正在使用哪个版本的perl?在“这是为x86_64-linux-gnu-thread-multi构建的perl,v5.10.1(*)下(Ubuntu 10.04.1 LTS)对我有效。您的确切主机是什么,perl版本,这是完整的代码吗?您确定生产代码中定义了$hostname
?您是否正在运行使用警告;严格使用代码>?您确定$hostname
没有多余的空格吗?您是否已将$hostname变量中所有不可见的字符删除?如果您认为$hostname确实是“host2”,我会验证它。如果您认为是,我会验证$hostname确实是“host2”。argh…缺少的chomp确实是问题所在。但是,为什么调试器从不显示任何其他正在求值的elsif子句?它只是直接跳到另一个。啊……缺失的咀嚼确实是问题所在。但是,为什么调试器从不显示任何其他正在求值的elsif子句?它只是直接跳到另一个。
my $driver = 'dbi:Oracle:';
my %dbihosts = (
host1 => 'dbhost1',
host2 => 'dbhost2',
host3 => 'dbhost3',
host4 => 'dbhost3',
);
my $hostname = "host2";
die "Unknown host '$hostname'" unless exists $dbihosts{ $hostname };
my $dbhost = $dbihosts{ $hostname };
print "$hostname -> $dbhost\n";
$dbh->connect("$driver$dbhost", ...);