Domanda

Sto analizzando i file XML con qualcosa del tipo:

while (<files/*.xml>) { ... }

Voglio usare una costante per "file", diciamo

use constant FILES_PATH => 'files';
while (<FILES_PATH/*.xml>) { ... }

Spero che tu capisca l'idea e mi possa aiutare :) ..

Grazie in anticipo.

È stato utile?

Soluzione

Hmm, questo è uno dei motivi per usare Readonly anziché costante. Potresti essere in grado di usare & l'inizio o () alla fine della costante per far capire a Perl che è una subroutine. Fammi controllare.

No, ma puoi usare il classico trucco di creare un arrayref per dereference:

#!/usr/bin/perl

use strict;
use warnings;

use constant DIR => "/tmp";

print map { "$_\n" } <${[DIR]}[0]/*>;

Ma poiché glob "*" è uguale a <*> potresti preferire:

#!/usr/bin/perl

use strict;
use warnings;

use constant DIR => "/tmp";

print map { "$_\n" } glob DIR . "/*";

Probabilmente direi

#!/usr/bin/perl

use strict;
use warnings;

use Readonly;

Readonly my $DIR => "/tmp";

print map { "$_\n" } <$DIR/*>;

Altri suggerimenti

Come altri hanno già detto, si tratta solo di interpolazione di stringhe.

Il costante pragma fallisce nei contesti interpolativi, quindi devi usare qualcosa che funzioni.

Come già accennato, Readonly è un'opzione.

Puoi anche usare il vecchio " assegnare un valore di sola lettura a un trucco tipeglob " ;.

our $FILES_PATH; # declare FILES_PATH scalar to keep strict happy.
*FILES_PATH = \'files';  # Assign to typeglob so $FILES_PATH points to a string literal  

while( <$FILES_PATH/*.xml> ) {
    # read the files
}

Sicuramente " / " in questo contesto verrebbe trattato come una divisione e non è probabile che vada da nessuna parte. Penso che potresti dover fare un passo indietro e guardare quali altre opzioni hai. Penso che tu stia provando a fare & Quot; file globbing & Quot; e mi sembra di ricordare il supporto in perl per quello, anche se non ricordo i dettagli. C'è un & Quot; Glob & Quot; modulo in CPAN che potresti voler guardare. Personalmente sarei molto più pedonale e userei DirHandle e filtrerei i file non xml con un & Quot; prossimo ... a meno che ... & Quot; linea.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top