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