Ответ 1
Если вы вызываете perl из командной строки, вы можете использовать флаг -E
-
-E program
: как-E
, но включает все дополнительные функции
Как показано:
$ perl -E 'say "qqq"'
qqq
В новых Perls есть команда "say", которая ведет себя как println:
$ perl -e 'use v5.11; say "qqq"'
qqq
но это немного громоздко для использования в oneliners, так как нужно объявить версию...
$ perl -e 'say "qqq"'
String found where operator expected at -e line 1, near "say "qqq""
$ perl -e 'print "qqq\n"'
qqq # but \n is easy for forget and "print" is longer...
Есть ли способ включить say
без добавления косой черты (может быть уже много в строке) или перемещение курсора влево, чтобы ввести use v5.11
в командной строке?
Если вы вызываете perl из командной строки, вы можете использовать флаг -E
-E program
: как -E
, но включает все дополнительные функцииКак показано:
$ perl -E 'say "qqq"'
qqq
Как опция -E
, я использую -l
, что делает print
работать как say
(добавить новую строку). Я использую это большую часть времени самостоятельно, и я считаю, что он полностью заменяет say
.
$ perl -lwe'print "foo"'
foo
То, что действительно делает, устанавливается $\
на текущее значение $/
, что приводит к тому, что параметр командной строки -0
влияет на параметр -0
, и это то, что нужно посмотреть. Порядок переключателей имеет значение, так что
$ perl -l -00 -e'print "hi"'
работает как ожидалось, но
$ perl -00 -l -e'print "hi"'
Нет (он устанавливает $\
в "\n\n"
, для режима абзаца).
Этот последний случай практичен при использовании режима абзаца, чтобы легко распечатать абзацы. В общем, есть много преимуществ при использовании -l
.
Технически, print
длиннее, чем say
, но мои пальцы уже набирают print
автоматически, а print
находится в фактическом случае короче print^H^H^H^H^Hsay
.. (backspace, который есть)
perl -E'say "foo";' # 5.10+ (Forward-incompatible!)
perl -Mfeature=say -e'say "foo";' # 5.10+
perl -M5.010 -e'say "foo";' # 5.10+
perl -e'CORE::say "foo";' # 5.16+
Смотрите здесь о том, как -E
может вызвать проблемы.