Вопрос не в том, как сказать в oneliner. Если вы пишете код в одну строку, вы знаете, вы. Но как модуль, включенный -MMy::Module::Name
, знает, что все началось с одного пользователя.
Это мое. Хотя он непереносим и использует стандартные команды UNIX (хотя его можно сделать более или менее переносимым).
my $process_info = `ps $$ | tail -1`;
my $is_oneliner
= $process_info =~ m/perl.*?\s+-[^\P{IsLower}e]*e[^\P{IsLower}e]*\s+/m
;
И если у вас есть удивительное регулярное выражение, не стесняйтесь улучшать мое.
Несколько человек спросили, почему я хотел бы сделать это. Брайан правильно догадался, что я хотел изменить поведение экспорта в зависимости от того, был ли это сценарий, который, как мы можем предположить, имел определенный дизайн, или же он был единственным, где пользователь пытается сделать как можно больше в одной командной строке.
Это звучит плохо, потому что существует такое кредо, что экспортеры должны уважать другие пакеты - иногда известные как "@EXPORT
is EVIL !" Но мне кажется, что это глупая последовательность применительно к oneliners. После того, как весь perl выходит из-под контроля, нарушает структуру своего языка и дает вам простые циклы, если вы запрашиваете их в командной строке, я просто хочу расширить эту идею для моей операционной / бизнес-сферы. Я даже хочу применить исходные фильтры ( вздох! ), если это поможет.
Но этот вопрос также говорит о том, что я, возможно, тоже хочу быть хорошим гражданином Perl, потому что в некоторых случаях я нарушаю правила сообщества. Довольно здорово иметь возможность создавать основные действия бизнес-уровня, просто изменив командную строку в пакетном планировщике, а не написав целый новый модуль. Цикл испытаний сильно сжат.