Как поделиться модулем, используя «наши» переменные из разных источников? - PullRequest
1 голос
/ 26 января 2020

У меня есть подпрограмма в модуле, в которой я хочу использовать «наши» переменные, найденные в вызывающей программе. Следующий код делает именно то, что я хочу, но только для двух ранее известных случаев. Есть ли способ сделать это более элегантно?

sub hello { # this code is in a module
  my $caller = (caller)[0];
  if ($caller eq 'main') {
    print "Hello $main::global!\n";
  } elsif ($caller eq 'Test') {
    print "Hello $Test::global!\n";
  } else {
    print "I don't know what to do!\n";
    return 0;
  }
  return 1;
}

1 Ответ

2 голосов
/ 26 января 2020

Идиома, которую вы ищете:

no strict 'refs';
print "Hello ",${"$caller\::global"}, "!\n";

Эта конструкция недопустима в use strict, поэтому вы должны отключить строгие ссылки при ее использовании.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...