Присвоение последнего значения PWD переменной в модуле perl

#perl #variable-assignment #perl-module

Вопрос:

я хотел назначить переменную $run в модуле perl и проверить состояние if. В основном $run переменной присваивается последнее значение текущего рабочего каталога и в условии if, если скрипт perl проверяет значение, присвоенное переменной $run

часть фрагмента кода скрипта модуля perl, в котором была замечена точная проблема.

 ex.pm
-----
 my $run = ${PWD##*/};
  if ( $2 ne $run)
  {
    die "$0 should be run in a $run directory.";
  }
 

с этим кодом у меня возникает проблема с компиляцией. то же самое, если у вас есть условие if со значением последнего пути, жестко закодированным, оно работает хорошо if ( $2 ne '4') .

сообщения о проблемах компиляции

 syntax error at bin/ex.pm line 44, near ")
  {"
syntax error at bin/ex.pm line 49, near "$sitepath "
BEGIN not safe after errors--compilation aborted at bin/TestConstants.pm line 72.
Compilation failed in require at bin/ex1.pm line 13.
BEGIN failed--compilation aborted at bin/ex1.pm line 13.
Compilation failed in require at ./bin/test.pl line 26.
BEGIN failed--compilation aborted at ./bin/test.pl line 26 (#1)
    (F) Probably means you had a syntax error.  Common reasons include:

        A keyword is misspelled.
        A semicolon is missing.
        A comma is missing.
        An opening or closing parenthesis is missing.
        An opening or closing brace is missing.
        A closing quote is missing.
 

Ответ №1:

Вы не можете использовать синтаксис bash в Perl.

 $run = ${PWD##*/};
 

Правая сторона-это простой способ сказать «Удалить все до последней косой черты», который в Perl записывается как

 $run = $ENV{PWD} =~ s{.*/}{}r;
 

или

 $run = substr $ENV{PWD}, 1   rindex $ENV{PWD}, '/';
 

Комментарии:

1. $run = $ENV{PWD} =~ s{.*/}{}r; здесь переменной $run присваивается $ENV{PWD} и $ENV{PWD} присваивается =~ s{.*/}{}r; . так вот что происходит с этой линией? с добавлением этой строки возникнет проблема компиляции.

2. Нет, во $ENV{PWD} всем, вплоть до последнего / , подставляется пустая строка, и результат присваивается $run . Для работы модификатора требуется Perl 5.14 r (10 лет).