Perl: Нужна динамическая подстановка в строке переменной, а не при парсинге

my @banks = @banksDup= ("abs", "qer", "qaz");
my $serverFailedabs;
my $serverFailedqer;
my $serverFailedqaz;

### Some processing of $serverFailedabs, $serverFailedqer and $serverFailedqaz happens here ###

foreach my $bank (@banks) {
        if ("$serverFailed${bank}" ne "")    ## Line 85
        {
                print "$bank server setup failed;
                @banksDup = grep !/${bank}/, @banksDup;
        }
    }

Ошибка:

Global symbol "$serverFailed" requires explicit package name at perl1.pl line 85

Здесь "$serverFailed${bank}" рассматривается как $serverFailed на этапе синтаксического анализа и выдает ошибку. Как я могу избежать этой проблемы?

Я хочу, чтобы "$serverFailed${bank}" выполнялся во время выполнения, чтобы "$serverFailed${bank}" получал правильное значение

Узнайте, как использовать ассоциативный массив вместо тестирования неправильного кода

Gilles Quénot 13.02.2023 14:18

Для получения дополнительной информации о том, почему этот подход плох и почему рекомендуется использовать хэш, прочитайте это

ikegami 13.02.2023 16:44

@GillesQuenot: Сообщество Perl переключилось на то, чтобы называть их «хэшами», когда в 1994 году был выпущен Perl 5.

Dave Cross 13.02.2023 17:28

Я предполагаю, что ОП не знает хеш, поэтому ассоциативный массив - это еще один способ поговорить о хеше. Просто моя мысль. Но да, в Perl это хэш :)

Gilles Quénot 13.02.2023 17:31
Laravel с Turbo JS
Laravel с Turbo JS
Turbo - это библиотека JavaScript для упрощения создания быстрых и высокоинтерактивных веб-приложений. Она работает с помощью техники под названием...
Типы ввода HTML: Лучшие практики и советы
Типы ввода HTML: Лучшие практики и советы
HTML, или HyperText Markup Language , является стандартным языком разметки, используемым для создания веб-страниц. Типы ввода HTML - это различные...
Аутсорсинг разработки PHP для индивидуальных веб-решений
Аутсорсинг разработки PHP для индивидуальных веб-решений
Услуги PHP-разработки могут быть экономически эффективным решением для компаний, которые ищут высококачественные услуги веб-разработки по доступным...
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
Слишком много useState? Давайте useReducer!
Слишком много useState? Давайте useReducer!
Современный фронтенд похож на старую добрую веб-разработку, но с одной загвоздкой: страница в браузере так же сложна, как и бэкенд.
Узнайте, как использовать теги <ul> и <li> для создания неупорядоченных списков в HTML
Узнайте, как использовать теги <ul> и <li> для создания неупорядоченных списков в HTML
HTML предоставляет множество тегов для структурирования и организации содержимого веб-страницы. Одним из наиболее часто используемых тегов для...
0
4
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используйте хэш.

my @banks = ( "abs", "qer", "qaz" );
my @banksDup = @banks;

my %serverFailed = (
  abs => '',
  qer => '',
  qaz => '',
);

for my $bank ( @banks ) {
   if ( $serverFailed{$bank} ne "" ) {
      print "$bank server setup failed\n";
      @banksDup = grep $_ ne $bank, @banksDup;
   }
}

Другие вопросы по теме