Статические локальные переменные в Perl

Мне нужен совет по лучшим практикам Perl. Я написал скрипт со сложным регулярным выражением:

my $regex = qr/complicated/;

# ...

sub foo {
  # ...

  if (/$regex/)
  # ...
}

где foo— часто вызываемая функция, а $regexвне этой функции не используется. Каков наилучший способ справиться с такими ситуациями? Я хочу, чтобы его интерпретировали только один раз, так как он длинный и сложный. Но кажется немного сомнительным иметь его в глобальном масштабе, поскольку он используется только в этом подразделе. Есть ли разумный способ объявить его статическим?

Аналогичная проблема возникает с другим, возможно, неоправданным глобальным. Он считывает текущую дату и время и соответствующим образом форматирует их. Это также используется много раз, и снова только в одной функции. Но в этом случае еще более важно, чтобы он не был повторно инициализирован, так как я хочу, чтобы все экземпляры даты и времени были одинаковыми из данного вызова сценария, даже если минуты переходят во время выполнения.

На данный момент у меня есть что-то вроде

my ($regex, $DT);

sub driver {
  $regex = qr/complicated/;
  $DT = dateTime();
  # ...
}

# ...

driver();

, что хоть немного его выделяет. Но, возможно, есть лучшие способы.

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

14
задан Charles 1 June 2012 в 03:06
поделиться