У меня есть оператор if внутри цикла while для фильтрации имен файлов * .iso, а не * .vmdk.Это работает ... Сорта, есть только одна маленькая проблема, которую я не могу понять.Когда я запускаю код, и в цикле есть совпадение с оператором if, он делает запись хеша точно такой же, как и должна, но поскольку он не знает номер канала интерфейса IDE, он просто вызывает запись хеша "IDE", а«IDE0» или «IDE1».
Вот мой код,
foreach my $vm (@virtual_machines) {
my $vmx_file = $ssh1->capture("cat $virtual_machines{$vm}{VMX}");
my $disk_count = -1;
my $port;
while ($vmx_file =~ m/^(ide(?<PORT>[0-1])\:[0-1])\.fileName\s+=\s+"(?<DISK>[^"]+)["]/xmg) {
$port = "$+{port}";
if ("$+{DISK}" =~ m/\/vmfs\/volumes\/.+?\/(?<ISO>.+?\.iso)/xm) {
++$disk_count;
$virtual_disks{$vm}{"IDE$+{PORT}"}{"Disk$disk_count"} = "$+{ISO}";
} else {
++$disk_count;
$virtual_disks{$vm}{"IDE$+{PORT}"}{"Disk$disk_count"} = "$+{DISK}";
}
}
}
Как я уже говорил выше, код работает за исключением этой части.Это то, как я подхожу к этому неправильно?Мне нужно сделать что-то вроде цикла, который ищет 2 совпадения или что-то?