2009-06-10 2 views
1

Ich habe dieses Skript von mir FOREVER verwendet und ich habe immer "~ /" verwendet, um mein Home-Verzeichnis zu erweitern. Ich komme heute zur Arbeit und es hat aufgehört zu arbeiten:

Irgendwelche Ideen darüber, warum das plötzlich aufhören würde worrking?

Fehler wie folgt aussieht:

cant open stephen/tmp/find_coverp.rslt : No such file or directory at /user/stephen/bin/find.pl line 137. 
+0

Was hat sich in Ihrer Umgebung geändert, dass das Programm plötzlich nicht mehr funktioniert? –

+0

Ich bin mir nicht sicher. Sie machen in diesen Tagen eine Menge Änderungen, so dass ich mir nicht sicher bin, welches das Problem verursacht haben könnte. Sie machen sich bereit, unsere Server quer durch das Land zu bewegen! – stephenmm

Antwort

3

Die Tilde-Erweiterung wird nicht von Perl ausgeführt, sondern von der Shell.

Sie stattdessen verwenden sollte: Wie

use File::Spec::Functions qw(catfile); 
... 
my $fn = catfile $ENV{HOME}, 'tmp', "find_$strings[0].rslt"; 
... 
open my $out, '>', $fn or die "Cannot open '$fn': $!"; 
+0

Das sind feine Antworten, außer dass es funktionierte. Warum hat es an einem Punkt funktioniert und was hätte sich ändern können, damit es nicht mehr funktioniert? Nur um zu beweisen, dass sie das gleiche sind, hier ist ein Unterschied von Schnappschuss von vor einer Woche: > cp .snapshot/weekly.1/find.pl ~/tmp > diff ~/tmp/find.pl ~/bin/finden .pl 96c96 if ($ output eq "") {$ output = "$ ENV {HOME}/tmp/find_ $ zeichenfolgen [0] .rslt"} #WORKS – stephenmm

+1

Haben Sie gelesen, was Sie gepostet haben? Ich sehe in keiner dieser Saiten etwas. –

+0

Komisch, ich sehe die Tilde im Original Post. – lexu

0

~ von der Shell erweitert wird. Perl hat keine Ahnung davon. Es würde also nur innerhalb eines Shell-Skripts funktionieren.

+0

Wie in der Frage gesagt wurde, hat es für immer funktioniert und nur plötzlich aufgehört zu arbeiten heute ... – stephenmm

7

nach vorheriger Antwort erklärt: "~" (Tilde) von Shell erweitert wird, Perl nicht. Höchstwahrscheinlich war es funktioniert aufgrund Existenz eines Verzeichnisses „~“ im aktuellen Verzeichnis, das wurde schließlich entfernt, um die Bug Oberflächen führend:

Zur Veranschaulichung:

  1. Tilde arbeitet nicht in Perl, $ ENV mit {HOME} funktioniert:

     
    $ echo MM > MM 
    $ perl5.8 -e '{print `cat ~/MM`}' 
    cat: cannot open ~/MM 
    $ perl5.8 -e '{print `cat $ENV{HOME}/MM`}' 
    MM 
    
  2. machen das Tilde-Namen-Verzeichnis funktioniert:

     
    $ mkdir \~ 
    $ echo MM > \~/MM 
    $ ls -l \~ 
    -rw-rw-r-- 1 DVK users   3 Jun 10 15:15 MM 
    $ perl5.8 -e '{print `cat ~/MM`}'   
    MM 
    
  3. Entfernen sie den Fehler wieder her, wie Sie beobachtet:

     
    $ /bin/rm -r \~ 
    $ ls -l \~ 
    ~: No such file or directory 
    $ perl5.8 -e '{print `cat ~/MM`}' 
    cat: cannot open ~/MM 
    

Dies bietet eine plausible Erklärung, obwohl ich nicht 100% bin nicht da andere sein kann.

+0

+1 außer es ist "Tilde" – SqlACID

Verwandte Themen