Avatar billede Max Novice
20. februar 2008 - 15:52 Der er 4 kommentarer og
1 løsning

Check fil med mellemrum, etc.

Hej alle.

Jeg har list problemer med et Perl script, som skal checke om en given fil findes på et linux filsystem.

Filnavnet står i variablen $configFile og indeholder oprindeligt dette:
/vmfs/volumes/45f963b4-69dbf9bc-4db5-001372600484/Skal slettes om lidt af (ML)/Skal slettes om lidt af (ML).vmx

Men som bekendt er mellemrum og paranteser ikke det bedste at bruge i et linux filsystem (filerne er oprettet fra en ikke-linux maskine). Så jeg gør følgende:

  $configFile=~s/\s/\\ /g;
  $configFile=~s/[(]/\\(/g;
  $configFile=~s/[)]/\\)/g;

.. og får herefter følgende indhold i $configFile variablen:
/vmfs/volumes/45f963b4-69dbf9bc-4db5-001372600484/Skal\ slettes\ om\ lidt\ af\ \(ML\)/Skal\ slettes\ om\ lidt\ af\ \(ML\).vmx

Dette burde være et fuldt gyldigt linux filnavn, men når jeg i mit script prøver følgende:

  unless (-e $configFile)
  {
    print "Dur ikke!";
  }

.. så skriver den: Dur ikke!
Jeg har prøvet at cat'e det nye filnavn i linux konsollen, og det virker fortrindligt, så der må være et eller andet i Perl, jeg ikke forstår..

Håber I kan hjælpe.
Mvh.
Avatar billede Slettet bruger
20. februar 2008 - 16:07 #1
jeg lavede lige en test på linux

~> touch alice\ bob\ foo

$f = 'alice bob foo';

if ( -e $f ) {
  print "findes\n";
}

melder så at filen files.

Så vidt jeg kan se går -e uden om shellen, hvorfor du så ikke skal escape mellemrum
Avatar billede Max Novice
20. februar 2008 - 16:18 #2
Hah!
Jeg er blevet snydt af min egen Perl-grønhed..

  unless (-e $configFile)

.. skal selvfølgelig være:

  unless ( -e $configFile )

Hmm.. Det var dumt! Nå, men men -e checket går uden om shell'en? Det er meget rart at vide, så smider jeg bare mine regex substitutions ud.. ;)

Tak for indsatsen. Smid et svar, så får du points Daleif.

Mvh.
Avatar billede Slettet bruger
20. februar 2008 - 16:24 #3
jeg er vist kodeblind, hvad er lige forskellen på de to linier?
Avatar billede Max Novice
20. februar 2008 - 16:27 #4
Mellemrum efter ( og før )... :)
Avatar billede Slettet bruger
20. februar 2008 - 16:48 #5
Det har intet at sige, det er en læsbarheds konvension

(-e $f) er det samme som ( -e $f )

det sidste er bare nemmere at overskue, især når det er lange udtryk.

Se 'Perl Best Practices' hvis du har adgang til den bog.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester