我的配置腳本中有一小段代碼,想法是配置被加載,然後檢查每個鍵是否已輸入主機名。但是,如果發現某個配置包含相同的主機名,則它將被拒絕並顯示一條警告消息,指出該主機名的配置已存在。如何在斷開foreach循環後重新啓動「do-while」循環?
問題是我需要foreach循環檢查散列鍵的存在以重新啓動do-while循環,以便可以嘗試另一個主機名,或者用戶可以將^C
排除在腳本之外。
這是摘錄;
my $host;
do {
print "Enter the hostname or IP of the ESXi server: ";
chomp($host = <STDIN>);
if ($host eq '') {
print "You must enter a hostname or IP address!\n";
} elsif ($host ne '') {
# We need to catch duplicate configurations for we don't do the same work twice
foreach (keys %config) {
if ($config{$_}{host} ne $host) {
last;
} elsif ($config{$_}{host} eq $host) {
warn "Configuration for $host already exists!\n";
}
}
if ($ping_obj->ping($host)) {
$config{$config_tag}{host} = $host;
} elsif (! $ping_obj->ping($host)) {
print RED . "Ping test for \'$host\' failed" . RESET . "\n";
}
$ping_obj->close();
}
} while ($config{$config_tag}{host} eq 'undef');
這就是模板哈希的樣子。
my %template = (
host => 'undef',
port => 'undef',
login => {
user => 'undef',
password => 'undef',
},
options => {
snapshots => "0",
compress => "0",
# This is expressed as an array
exclude => 'undef',
},
);
這是應該做的:'eq'undef''?我希望你沒有試圖去檢查這個值是否是未定義的,因爲那不是那麼做的。 – TLP 2011-12-22 00:41:30
我正在檢查它是否是'undef',但是它檢查的散列是用值undef'硬編碼的。 – ianc1215 2011-12-22 01:18:36
不,不,不是,你要麼檢查它是否是'undef'(字符串),要麼檢查'undef'中的'未定義'。你的措辭是不明確的。 – TLP 2011-12-22 01:26:54