Как я могу добавить функцию, основанную на версии Perl? - PullRequest
7 голосов
/ 22 марта 2011

Извините, если об этом спросили, но мне было трудно искать.

Я использую Perl 5.12 локально, но некоторые из наших машин используют Perl 5.8.8, и они пока не будут обновлены.

Для одитинга я использую 'say' на платформе 5.12.

Я написал простую функцию для реализации скажем на 5.8.8, но я не хочу использовать ее на 5.12.

Есть ли способ использовать мою функцию say только в более старой версии Perl и использовать встроенную версию say в 5.12?

Ответы [ 2 ]

9 голосов
/ 22 марта 2011

Вы можете использовать специальную переменную $^V , чтобы определить версию интерпретатора Perl:

BEGIN {
    if ($^V ge v5.10.1) {  # "say" first appeared in 5.10
        require feature;
        feature->import('say');
    }
    else {
        *say = sub { print @_, "\n" }
    }    
}
8 голосов
/ 22 марта 2011

Это должно работать:

BEGIN{
  no warnings 'once';
  unless( eval{
    require feature;
    feature->import('say');
    1
  } ){
    *say = sub{
       print @_, "\n";
     }
  }
}
...