Pergunta

Alguns dos novos recursos do Perl 5.10 e 5.12, como "say", são definidos como recursos que você pode ativar ou desativar explicitamente usando o pragma "recurso".Mas outras adições, como os grupos de captura de expressões regulares nomeados, estão implícitas.

Quando escrevo Perl usando um interpretador 5.10+, mas quero que ele também seja executado no 5.8, posso fazer o Perl reclamar do uso de algo que não esteja no 5.8?Obviamente, é uma boa prática testar seu código em todas as versões principais nas quais você pretende que ele seja executado, mas ainda assim seria bom que o Perl me avisasse automaticamente.

Foi útil?

Solução

Quando quero garantir que um programa será executado em versões específicas do Perl, eu o testo nessa versão do Perl.Uma característica minha liberar testes de aplicativos em vários perls antes de realmente serem carregados.

Isso requer que você tenha um conjunto de testes adequado e escreva testes suficientes.Também é fácil manter várias instalações Perl separadas ao mesmo tempo, como mostro em Programação Perl Eficaz.

Teste::Versão Mínima quase parece que pode funcionar, mas tem várias limitações.Ele apenas analisa o arquivo que você fornece (portanto, não verifica nada que você carrega) e não acho que realmente olhe dentro dos padrões regex.Cada um deles informa que a versão mínima é 5.004, o que não é verdade para nenhum deles:

#!perl

use Perl::MinimumVersion;

my $p_flag = <<'SOURCE';
'123' =~ m/[123]/p; # 5.10 feature
SOURCE

my $named_capture = <<'SOURCE';
'123' =~ m/(?<num>[123])/; # 5.10 feature
SOURCE

my $r_line_ending = <<'SOURCE';
'123' =~ m/[123]\R/p; # 5.12 feature
SOURCE

my $say = <<'SOURCE';
say 'Hello';
SOURCE

my $smart_match = <<'SOURCE';
$boolean = '123' ~~ @array;
SOURCE

my $given = <<'SOURCE';
given( $foo ) {
    when( /123/ ) { say 'Hello' }
    };

SOURCE

foreach my $source ( $p_flag, $named_capture, $r_line_ending, $say, $smart_match, $given ) {
    print "----Source---\n$source\n-----";
    my $version = Perl::MinimumVersion->new( \$source  )->minimum_version;
    print "Min version is $version\n";
    }

Parte da razão Perl::MinimumVersion funciona é porque procura dicas que a fonte já fornece, como use 5.010, e use feature breve.No entanto, essa não é a única maneira de ativar recursos.E, como você notará, faltam coisas como o /p flag, pelo menos até que alguém adicione um cheque para isso.No entanto, você sempre estará perseguindo coisas assim com um PPI solução.

É mais fácil compilá-lo, executar os testes e descobrir.

Outras dicas

Eu não acho que você pode fazer verificação perl ao executar o código, mas Check out Perl :: MinumVersion e Teste :: MinumVersion .(Este último é apenas um teste :: construtor wrapper ao redor do primeiro.) .

Bem de ler outras respostas, sua resposta é não, mas talvez App :: Perlbrew pode ajudá-lo a instalar e gerenciar várias versões de perl para testes.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top