Stepping через код выше, эта строка:
foreach (readdir $d) {
считывает имя каждый из файлов в каталоге, который вы открыли для дескриптора «$ d», и назначает каждый из этих файлов по очереди переменной thing ($ ). (Эта переменная является одним из тех странных, но блестящих идиосинкразии Perl Вам не говоря уже о $ в большинстве случаев, это просто есть.).
Затем в следующей строке:
if (-f && -x && /^build-(\d+)-installer/) {
В " -f "и" -x "равны file test operators. Поскольку ни один из них не имеет явного аргумента (например, -f «myfile.txt»), он будет использовать переменную переменной подразумеваемой переменной $ _. Оператор -f просто проверяет, является ли что-то файлом, и -x проверяет, является ли файл исполняемым, (как указано установочным битом). Третья часть,/^ build - (\ d +) - installer /, проверяет, соответствует ли он этому шаблону.
Как вы упомянули в своем комментарии выше, список каталогов показывает
-rw------- 1 nikk nikk 52238 Feb 27 20:50 build-4607-installer.pl
РМ ------- показывает права доступа к файлам для каждой из трех групп, владелец («Nikk») и группе, которой принадлежит файл (второй «nikk»). Первые три символа, начиная с rw-, показывают, что nikk может читать и писать из файла, но не выполнять. В листинге будет отображаться rwx, если nikk может выполнить файл. Следующие две группы из трех символов --- и --- показывают, что ни группа никк, ни кто-либо еще на машине не могут читать, писать или выполнять.
More information on Unix file system permissions
Отсутствие казнить разрешения является причиной «-x» тест на провал. Это можно сделать двумя способами. Либо удалите -x из теста if, чтобы он выглядел так:
if (-f && /^build-(\d+)-installer/) {
Или добавить разрешение на выполнение для файла. Чтобы сделать это, просто для владельца (предполагается, что программа работает как пользователь Nikk или как корень, сделайте следующее:
CHMOD и + х build-4607-installer.pl
More information on chmod.
Я надеюсь, что полезный!
Сценарий ожидает найти программу с именем 'build - ### - installer' (где' ### '- это некоторое число) в вашем текущем каталоге. У вас есть такой файл? – Barmar
@Barmar: yes , есть. Файл is build-4607-installer.pl. И мне интересно, почему скрипт не видит его? Я не знаю языка Pearl scripting. – nikk
Является ли я t исполняемый файл? Тест файла требует '-x' перед определением' $ installer'. –