Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]10781[/thread]

Use of unitialized value in pattern match (m//)



<< >> 8 Einträge, 1 Seite
StefanJ
 2007-11-12 15:14
#102258 #102258
User since
2005-05-03
35 Artikel
BenutzerIn
[default_avatar]
Hi @ all,

ich hoffe ihr könnt mir bei einem kleinen Problem helfen:
ich erhalte immer folgende Fehlermeldung
Use of unitialized value in pattern match (m//) in line .

Der zugehörige Quellcode sieht so aus:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
my $localpath = "c:/apps/Sync/";
my $localpathfiles;
   open(Source, '<', $localpath."localpath.txt")
      or die "Konnte Quelldatei nicht oeffen $!";
      while(<Source>)
      {
        $localpathfiles = $_;
      }
   close(Source);

chomp ($localpathfiles);
$localpathfiles =~ s/\s+$//g;
$localpathfiles =~ s/\\/\//g;

if ($localpathfiles ne~ /\/$/)
{
$localpathfiles = $localpathfiles."\/";
}


Wieso sagt er mir "value uninitialized" wenn $localpathfiles doch einen Wert hat ? (die localpath.txt wird vorher mit einem cmd-skript durch Eingabe mit einem Pfad gefüllt ,z.B. c:\synctest)

Kann mir das einer erklären, ich weiß zwar dass das nur ein Hinweis ist und die Funktionalität nicht beinflusst, aber ich wüsste gerne die Antwort auf dieses Problem :-)

Gruß,

StefanJ

----
Modedit Gwendragon:
bitte Code in Perl- oder-Tags
----
GwenDragon
 2007-11-12 15:20
#102259 #102259
User since
2005-01-17
14565 Artikel
Admin1
[Homepage]
user image
Zeile 15? was ist ne~ ?
Und - du prüfst nicht, ob der String leer ist.
die Drachin, Gwendolyn


Unterschiedliche Perl-Versionen auf Windows (fast wie perlbrew) • Meine Perl-Artikel

sid burn
 2007-11-12 15:40
#102263 #102263
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
Ein "nicht-match" geht mit "!~".
"ne~" gibt es nicht.
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
Siechfred
 2007-11-12 15:40
#102264 #102264
User since
2007-11-12
30 Artikel
BenutzerIn
[default_avatar]
Möglicherweise kommt am Ende der Textdatei nach der von Dir gesuchten noch eine Leerzeile, schau Dir die erzeugte Datei mal in einem Editor mit Anzeige der Formatierungssysmbole an.

Siechfred
renee
 2007-11-12 16:08
#102269 #102269
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Neben dem was die Anderen geschrieben haben: Wenn Du wirklich nur die letzte Zeile aus der Datei haben willst, würde ich CPAN:Tie::File verwenden:

Code (perl): (dl )
1
2
3
4
5
6
7
8
#!/usr/bin/perl

use Tie::File;
my $file = $localpath."localpath.txt";

tie my @lines, 'Tie::File', $file or die $!;
my $localfiles = $lines[-1];
untie @lines;


Wenn Du mit allen Zeilen in der Datei etwas machen willst, hat Dein Code Fehler...

Außerdem solltest Du chomp (siehe Perldoc:-f chomp) verwenden. Sonst hängst Du das "/" noch hinter ein Newline.
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
StefanJ
 2007-11-12 17:43
#102277 #102277
User since
2005-05-03
35 Artikel
BenutzerIn
[default_avatar]
okay, das wars schon: if ($localpathfiles !~ /\/$/)
Nun zeigt er das Warning aus dem Topic nicht mehr an...Danke

@Renee:
Eigentlich steht in meiner .txt-Datei lediglich eine einzige Zeile (der Ordnerpfad).
Gibt es hierfür einen kleineren Code, der genau das macht, was ich von Zeile 3-9 mache ??

Zeile 11-13 hab ich aus dem Grund , dass nach der Eingabe über eine cmd-skript-eingabe (set /p Pfad=Eingabe Pfad:) hinter dem "Pfad-String" zusätzlich automatisch noch ein Leerzeichen+Newline in der .txt eingefügt werden.
Daher entferne ich diese, tausche alle "\" durch "/" und füge noch ein "/" am Ende des String ein. ( z.B: c:\test wird zu c:/test/ )

StefanJ
renee
 2007-11-12 17:52
#102278 #102278
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
StefanJ+2007-11-12 16:43:56--
@Renee:
Eigentlich steht in meiner .txt-Datei lediglich eine einzige Zeile (der Ordnerpfad).
Gibt es hierfür einen kleineren Code, der genau das macht, was ich von Zeile 3-9 mache ??


Eigentlich?? Heißt das "Ich kann mir 100%ig sicher sein, dass immer nur 1 Zeile in der Datei steht? Oder heißt das "Ich nehme an, dass immer nur 1 Zeile in der Datei steht, aber ich weiß es nicht genau"?

Bei 1), brauchst Du z.B. keine while-Schleife. Einfach ein
Code (perl): (dl )
1
2
3
open my $fh, '<', $file or die $!;
my $line = <$fh>;
close $fh;


Wenn Du es eher kurz magst, kannst Du auch
Code (perl): (dl )
1
2
my $line = do{ local @ARGV = 'test.xml'; <> };
print $line;
verwenden.
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
StefanJ
 2007-11-13 11:03
#102329 #102329
User since
2005-05-03
35 Artikel
BenutzerIn
[default_avatar]
Streich das "eigentlich". Es steht definitiv nur eine Zeile in der txt.
Danke nochmal für die Tipps.

Gruß,

StefanJ
<< >> 8 Einträge, 1 Seite



View all threads created 2007-11-12 15:14.