Хорошо, давайте перепишем код, чтобы он а) компилировался, б) использовал текущую передовую практику и в) не раскошелился на cat
my @prelist = ();
my %superadminstaff = ();
open my $admin, '<', '../cgi-bin/superadmin.txt' or die "Can't open ../cgi-bin/superadmin.txt: $!\n";
chomp(@prelist = <$admin>);
@superadminstaff{@prelist} = ("Y") x @prelist;
Итак, у нас есть две переменные @prelist
и %superadminstaff
, @prelist
будет содержать каждую строку файла, а %superadminstaff
будет в конечном итоге введен для каждой записи в файле.
Строка 3 пытается открыть файл, а если не удается, останавливает сценарий и распечатывает сообщение, объясняющее, что пошло не так.
Строка 4 считывает файл в @prelist
ииспользует chomp
для удаления концов строк.Обратите внимание, что chomp
используется вместо chop
, поскольку последняя строка в файле может не иметь окончания строки.
В строке 5 используется некоторая магия Perl, называемая срезом хеша, для создания записей в %superadminstaff
для каждого элемента в @prelist
, а затем использует оператор x
для создания списка, содержащего столько же элементов Y
, сколько элементов в @prelist
, этот список из Y
s затем назначается вновь созданным элементам в%superadminstaff
.
Итак, в конце этого кода у вас теперь есть %superadminstaff
, содержащий каждую запись файла.Однако порядок элементов в файле не будет сохранен, и любые повторяющиеся записи в файле будут уменьшены до одной записи в %superadminstaff
.