Używam Perl 5.28. To jest mój skrypt

 #!/usr/bin/perl
 use strict; use warnings;
 
my @files = glob("msa_vcf/*vcf");

foreach my $f (@files){
    my $wk = $f =~ /(\d+)/;
    print "$wk    $f\n";
}

Całkiem proste rzeczy, ale to jest to, co drukuje

1    msa_vcf/1.vcf
1    msa_vcf/10.vcf
1    msa_vcf/11.vcf
1    msa_vcf/12.vcf
1    msa_vcf/13.vcf
1    msa_vcf/14.vcf
1    msa_vcf/15.vcf
1    msa_vcf/16.vcf
1    msa_vcf/17.vcf
1    msa_vcf/18.vcf
1    msa_vcf/19.vcf
1    msa_vcf/2.vcf
1    msa_vcf/20.vcf

Jeśli zrobię to w Pythonie za pomocą biblioteki re, otrzymuję prawidłową wartość. Składnia REGEX jest taka sama, więc co się dzieje?

0
BloozLawyer 13 kwiecień 2021, 20:42

1 odpowiedź

Najlepsza odpowiedź

Oceniasz mecz w kontekście skalarnym. W rezultacie powraca, czy mecz odniósł sukces, czy nie.

Chcesz ocenić mecz w kontekście listy. Odbywa się to poprzez wykonanie lewej strony przypisania "listy".

my ($wk) = $f =~ /(\d+)/;
3
ikegami 13 kwiecień 2021, 17:45