Как лучше всего определить, работает ли ваш Perl на -e?

Вопрос не в том, как сказать в 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 - ЗЛО !» Но мне кажется, что это глупая последовательность применительно к oneliners. После того, как весь perl выходит из-под контроля, нарушает структуру своего языка и дает вам простые циклы, если вы запрашиваете их в командной строке, я просто хочу расширить эту идею для моей операционной / бизнес-сферы. Я даже хочу применить исходные фильтры ( вздох! ), если это поможет.

Но этот вопрос также говорит о том, что я мог бы захотеть быть хорошим гражданином Perl, потому что я только нарушаю правила сообщества в определенных случаях. Довольно здорово иметь возможность создавать основные действия бизнес-уровня, просто изменив командную строку в пакетном планировщике, а не написав целый новый модуль. Цикл испытаний сильно сжат.

13
задан 03.10.2019, 01:09

4 ответа

[110] установлен на "-e", если Вы работаете от -e.

34
ответ дан 03.10.2019, 01:11

Если бы Вы хотите другое поведение экспорта, "чистый" способ сделать это использовал бы другое имя модуля. Если Вы действительно ожидаете делать большое использование остроты, можно даже дать ему краткое название. Например, MMN.pm:

package MMN;
use My::Module::Name '/./';
use Exporter ();
@ISA = 'Exporter';
@EXPORT = @My::Module::Name::EXPORT_OK;
1;

Примечание, что Средство экспорта немного знало regex функцию; можно просто хотеть сделать

perl -MMy::Module::Name=/./ -e ...
1
ответ дан 03.10.2019, 01:10
  • 1
    Я don' t знают, что это настолько чисто, но у меня уже есть план сократить названия вызова командной строки., – Axeman 03.10.2019, 01:10
  • 2
    что Вы имеете в виду с закрытым ключом набора здесь?? Я подразумеваю, что можно только добавить пользователя с правом доступа!? – mastervv 07.10.2019, 18:26

В Вашем import(), номер строки, возвращенный caller(), будет 0, если Ваш модуль был загружен через -M. Это верно каждый раз, когда М используется (с-e или не), но я думаю, что это - единственный случай, где номер строки 0.

1
ответ дан 03.10.2019, 01:10
  • 1
    жемчуг-le' #line 1'-e' sub {печать присоединяются к ":" вызывающая сторона}-> () ' – Brad Gilbert 03.10.2019, 01:10
  • 2
    жемчуг-le' #line 0'-e' sub {печать присоединяются к ":" вызывающая сторона}-> () ' – ysth 03.10.2019, 01:11
  • 3
    Спасибо, просто требуемое, чтобы указать, что при использовании iis7.5 и выполнений пула приложений как applicationpoolidentity необходимо будет дать полномочия пользователя IIS AppPool\DefaultAppPool файлу. Это решило проблему для меня. – Ronen Festinger 07.10.2019, 18:26

Почему Вы пытаетесь узнать, был ли модуль включен из командной строки? Есть ли некоторая ситуация, которую Вы имеете, где она имеет значение? Вы делаете что-то нечетное с импортом? Скажите нам, что Вы пытаетесь сделать, и я могу, вероятно, придумать лучший способ сделать это :)

<час>

Хорошо, Вы спрашиваете об экспорте. Какова проблема, которую Вы пытаетесь решить? Какой путь Вы хотите это? Дополнительный или меньше значения по умолчанию экспортирует из командной строки? Вы знаете, что можно указать список импорта с-M, включая тег экспорта (так, что-то от %EXPORT_TAGS)? И если Вы хотите пустой список экспорта, можно использовать-m (нижний регистр m) вместо этого. Посмотрите запись для-M/-m в perlrun.

Вы могли бы также интересоваться приемом "modulino", где файл модуля может быть и модулем и сценарием. Можно или использовать его в качестве регулярного модуля, в этом случае Вы имеете доступ ко всем его методам или называете его как сценарий, в этом случае это работает. Я описываю это в моем "Сценарии как Модули" статья для , Журнал а также , Perl, "Как Сценарий Становится Модулем" на Perlmonks.

10
ответ дан 03.10.2019, 01:11
  • 1
    It' s просто о поднимании питания на остротах. Поскольку остроты вряд ли определят именованный sub сами, я бросаю каждый sub, в котором они, возможно, нуждались бы в основное. That' s это. Когда модуль называют из более сложного кода, это остается вежливым. – Axeman 03.10.2019, 01:11
  • 2
    ... начнитесь маленькие и немного hackish, медленно растя до громоздкого размера, прежде рано или поздно, что функциональность требуется в другом месте, таким образом, целый рефакторинг потребностей путаницы (который редко идет гладко). Это должно полностью удалить проблему. – Dan 03.10.2019, 01:11
  • 3
    Brian: идеи представлены в Вашем " modulino" статья/incredibly/полезный. Это оба препятствуют ' hacky' сценарии, и обеспечивают непосредственную возможность многократного использования. Любите его, и I' m собирающийся предлагать добавить его к или внутренние инструкции по кодированию в понедельник - Одной из проблем, которые мы имеем, являются сценарии, склоняются к... – Dan 03.10.2019, 01:12
  • 4
    Да, that' s в основном это.-e получает больше экспорта, чем точно определенные сценарии, которые, по крайней мере, предлагают разработанное пространство пакета. I' m не совсем, как взволновано по поводу уважения основного остроты. – Axeman 03.10.2019, 01:12

Теги

Похожие вопросы