Ответы пользователя по тегу Perl
  • Как прочитать результат команды ОС в perl?

    shoorick
    @shoorick
    программист
    Можно открыть результат работы команды функцией open и читать его как обычный текстовый файл — см. perldoc -f open
    If MODE is "|-", then the filename is interpreted as a command to which output is to be piped, and if MODE is "-|", the filename is interpreted as a command that pipes output to us.


    Пример, читающий список процессов, возвращаемых командой ps ax, и выводящий каждый из них задом наперёд :
    #!/usr/bin/perl
    # https://qna.habr.com/q/1166324
    
    open(my $fh, '-|', 'ps ax')
         or die "Can't spawn ps: $!";
    
    while (my $process = <$fh>) {
        print scalar reverse $process;
    }

    Работает под Debian GNU/Linux. Получится ли аналогичное под виндой (с использованием указанной вами утилиты rac вместо линуксовой команды ps) — не возьмусь предсказать. Попробуйте.
    Ответ написан
    Комментировать
  • Как запустить программу на Perl в Windows?

    shoorick
    @shoorick
    программист
    1. Есть много способов: можете писать руками путь/к/перлу/perl скрипт.pl (точнее, у вас в качестве пути может быть что-нибудь вроде C:\Program Files\Some Perl\bin), можете добавить путь к перлу в переменную окружения %PATH% и запускать скрипты командой perl скрипт.pl, можете настроить ассоциацию перловых исходников с интерпретатором — вариантов масса. А ещё был когда-то cygwin, где перл конечно же был, а ещё в свежих версиях Windows 10 есть линуксовая подсистема, где тоже перл должен быть.

    2. #!/usr/bin/perl — так называемый shebang, особый комментарий, где после решётки с восклицательным знаком пишется путь к интерпретатору (это может быть не только перл) и, если надо, дополнительные параметры (например, #!/usr/bin/perl -F' ' -nla). В юниксоподобных системах это имеет значение — при запуске скрипта без указания команды вызова интерпретатора операционная система как раз в shebang и смотрит, чтобы понять, как же выполнить скрипт — бывают скрипты и без расширений. Под Windows shebang скорее всего роли не играет.

    3. Чтобы перл больше ругался, используйте
    use warnings;
    use strict;

    Вместо первой из этих строк можете добавить ключ -w при запуске перлового интерпретатора.

    4. IDE с поддержкой перла существуют. Лучшее из того, что попадалось мне под Windows — Komodo IDE. Есть упрощённая бесплатная версия — Komodo Edit: это уже не IDE (нет отладчика, юнит-тестов и ещё кучи всякой всячины), а просто навороченный редактор с поддержкой перла.
    Ответ написан
    1 комментарий
  • Как перед заменой выполнить поиск между определенными словами?

    shoorick
    @shoorick
    программист
    1. Для начала почитайте документацию — man perlre — пригодится в любом случае.

    2. Затем определитесь с квантификаторами в регулярном выражении: меня смущает звёздочка с вопросительным знаком — обычно для того, чтобы обозначить ноль или больше любых символов применяют либо звёздочку, если нужно жадное поведение (.* — максимально возможное количество любых символов) либо плюс с вопросительным знаком, если жадность не нужна (.+? — минимально возможное количество любых символов).

    3. Попутно можно и процедуру чтения файла упростить — можно сразу считать его в одну длинную строку, а не собирать её по кусочкам.

    4. Как дальнейшее развитие третьего пункта — сто́ит активнее использовать различные ключи, с которыми запускается интерпретатор перла для того, чтобы не писать вручную всякий рутинный код — см. man perlrun. Например, многострочную inplace-замену в файле с сохранением резервной копии можно выполнить командой
    perl -0777 -pi~ -e 's/что/куда/g' /путь/к/файлу/где/менять.conf

    То есть, вместо кучи малопонятного мусорного по сути своей кода останется только один оператор замены — ничего лишнего.

    5. Ну и всё-таки надо чётко сформулировать, что же вам надо. Я могу предположить, что вы хотите заменить строку "/var/www/$user/data/www/$domain" на "\n\tScriptAlias /php-bin/ /var/www/$user\n", но из вашего вопроса это явно не следует.

    6. В вашем примере стирается слишком многое из-за того, что вы меняете на новое содержимое не то, что лежит в переменной $find, а вообще что угодно (.*).
    Ответ написан
    Комментировать
  • Этично ли предлагать разработку на Perl?

    shoorick
    @shoorick
    программист
    Если вы пишете на перле с использованием Mojolicious, значит, для вас-то он точно не устаревший. Перлу всего-то 30 лет — вдвое моложе Кобола, на котором до сих пор что-то делают.
    Думаю, если писать нормально и сопровождать написанное внятной документацией, предложение писать на перле будет вполне этичным.
    Ответ написан
    Комментировать
  • Почему не устанавливается YAML в Perl?

    shoorick
    @shoorick
    программист
    Вам принципиально ставить именно через cpan? Попробуйте штатный метод установки ПО, используемый вашей операционной системой. В дебианоподобных линуксах (Debian, Ubuntu, Mint) — sudo apt install libyaml-perl
    Ответ написан
    Комментировать