Size: a a a

2021 July 09

С

Стас in Modern::Perl
кажется меня раскрыли лол, это какие то фишки перла?

нашел в доках

#!/bin/sh
#! -*- perl -*- -p


первый раз такое вижу) не понимаю зачем так делать если можно сразу указать перл)
источник

С

Стас in Modern::Perl
а там это вообще изврат с эвалами
источник

С

Стас in Modern::Perl
есть норм пример с двумя шебангами?
источник

SZ

Sergey Zhmylove in Modern::Perl
perldoc perlrun /-x
источник

SZ

Sergey Zhmylove in Modern::Perl
А то ты похоже про -S читаешь
источник

С

Стас in Modern::Perl
нет там же вот как раз первый пример

    Parsing of the "#!" switches starts wherever "perl" is mentioned in the
   line. The sequences "-*" and "- " are specifically ignored so that you
   could, if you were so inclined, say

       #!/bin/sh
       #! -*- perl -*- -p
       eval 'exec perl -x -wS $0 ${1+"$@"}'
           if 0;

   to let Perl see the "-p" switch.


а дальше идет аналог

#!/usr/bin/env perl


то чем сейчас все и пользуются,
источник

С

Стас in Modern::Perl
видимо для каких то древних систем
источник

С

Стас in Modern::Perl
в общем в случае с подсветкой я бы забил на этот двойной шебанг
источник

SZ

Sergey Zhmylove in Modern::Perl
Это для -S
источник

SZ

Sergey Zhmylove in Modern::Perl
Это как?
источник

SZ

Sergey Zhmylove in Modern::Perl
Это неправильно
источник

SZ

Sergey Zhmylove in Modern::Perl
Может у тебя скрипт на перле
источник

SZ

Sergey Zhmylove in Modern::Perl
А подсветишь ты его как огурец
источник

С

Стас in Modern::Perl
я не в курсе что такое -S и я не встречал скриптов c двойным шебангом, для скриптов на перл видел только вариант `
#!/usr/bin/env perl
в перле 2 шебанга это типичная ситуация?
источник

SZ

Sergey Zhmylove in Modern::Perl
Причем тут -S? Я тебе вот тут предложил почитать про -х. И я не скажу, что использование -х -- редкость
источник

С

Стас in Modern::Perl
 $ perldoc perlrun /-x
No documentation found for "/-x".

NAME
   perlrun - how to execute the Perl interpreter

SYNOPSIS
   perl [ -sTtuUWX ] [ -hv ] [ -V[:*configvar*] ]
   [ -cw ] [ -d[t][:*debugger*] ] [ -D[*number/list*] ]
   [ -pna ] [ -F*pattern* ] [ -l[*octal*] ] [ -0[*octal/hexadecimal*] ]
   [ -I*dir* ] [ -m[-]*module* ] [ -M[-]*'module...'* ] [ -f ]
   [ -C [*number/list*] ] [ -S ] [ -x[*dir*] ] [ -i[*extension*] ]
   [ [-e|-E] *'command'* ] [ -- ] [ *programfile* ] [ *argument* ]...

DESCRIPTION
   The normal way to run a Perl program is by making it directly
   executable, or else by passing the name of the source file as an
   argument on the command line. (An interactive Perl environment is also
   possible--see perldebug for details on how to do that.) Upon startup,
   Perl looks for your program in one of the following places:
источник

С

Стас in Modern::Perl
> perl -v

This is perl 5, version 32, subversion 1 (v5.32.1) built for x86_64-linux
(with 76 registered patches, see perl -V for more detail)
источник

С

Стас in Modern::Perl
может есть вариант показать рабочий пример скрипта с двумя шебангами а не ебать мозги?)
источник

SZ

Sergey Zhmylove in Modern::Perl
#!/bin/sh

Blablabla
Prepare environment
Blablabla

exec perl -x "$0"
exit 255
#!/usr/bin/perl -blablabla
use strict;
Blablabla
__END__
источник

С

Стас in Modern::Perl
спасибо, теперь понял, а че этот Prepare environment нельзя сделать внутри перл скрипта? реально первый раз вижу такую конструкцию, даже интересно стало поиграть с ней но мне не кажется что она популярная, но если @Pkupt именно с такими и работает то да, первая строка ему не поможет.
В любом случае не все же файлы исполняемые, наверняка в проекте куча модулей и коммент в первой строке покроет 90% кейсов, всяко лучше чем руками.
источник