Изменение
my $name = <>;
до
my $name = <STDIN>;
Если @ARGV
не имеет элементов, оператор diamond будет читать из STDIN
, но в вашем случае, поскольку вы передаете аргументы через командную строку, @ARGV
не будет пустым. Поэтому, когда вы используете алмазный оператор <>
для чтения имени, будет прочитана первая строка из файла, имя которого указано в командной строке.