Zwei Perl Regexps/Zweimal $1

Post Reply
Message
Author
aebi
Posts: 41
Joined: 02. Dec 1999 10:32
Location: Kastanienbaum

Zwei Perl Regexps/Zweimal $1

#1 Post by aebi »

Hallo Zusammen

Bei meinen kleinen Perl versuchen bin ich auf ein Problem gestossen, dass ich einfach nicht lösen kann. Es scheint fast zu einfach, aber ich finde einfach keine Lösung.
Ich habe zwei Regexps die Daten aus Variablen rausholen. Beide brauchen $1. Die zweite Regexp trifft nicht immer zu. Falls sie nicht zutrifft, habe ich noch den alten Wert drin, was ich aber nicht möchte...
Kann ich $1 irgenwie zurücksetzen?

Ach ja, seit ich den interpreter mit -w aufrufe beschwert er sich, dass $1 doppelt verwendet ist "Use of uninitialized value in pattern match (m//) at ../cddbtag.pl line 96.". Kann ich ihm vieleicht auch sagen $3 zu nutzen oder so?

Ich habe folgenden Code geschrieben:
#!/usr/bin/perl -w
use strict;
--Schnipp--
foreach my $disc (@discs) {
my ($genre, $cddb_id, $name) = @$disc;
#Get the disc details
my $detail = $cddb->get_disc_details($genre, $cddb_id);

#Get album & artist
$name =~ /(.*) \/ (.*)/; <---------------
$artists{$1}++;
$albums{$2}++;

#Get the year
$detail->{extd} =~ /YEAR: (\d*)/; <---------------
$years{$1}++;
}

Danke viel mals...

Philippe

ratte

Re: Zwei Perl Regexps/Zweimal $1

#2 Post by ratte »

$1 gehoert zu den Sondervariablen, die Perl intern verwendet und duerfen zb. auch nicht vom user veraendert werden.

solche schwierigkeiten, wie du sie hast, umgehe ich mit plausibilitaetspruefungen mit kleinen if-abfragen.

ratte

aebi
Posts: 41
Joined: 02. Dec 1999 10:32
Location: Kastanienbaum

Re: Zwei Perl Regexps/Zweimal $1

#3 Post by aebi »

Danke für deine Antwort. Das mit de plausibiltätsprüfungen funktionierte in meinem Fall nicht, da nicht von einer bestimmten Werteart ausgehen konnte.
Ich habe stattdessen eine andere Lösung gefunden; ich packte die beiden Codeteile einfach in geschweifte Klammern. So stören sie sich nicht mehr gegenseitig. Sieht so aus:

#Get album & artist
{$name =~ /(.*) \/ (.*)/;
$artists{$1}++;
$albums{$2}++;}
#Get the year
{$detail->{extd} =~ /YEAR: (\d*)/;
$years{$1}++;}

Trotzdem Danke
Philippe

Post Reply