Schnaps: uninitialized value in $1 Variable nach Regulärem Ausdruck

Servus

Ich wundere mich über eine Fehlermeldung hier,
die Zeilen wo ich mir das $1 und $2 ausgeben lassen will produzieren eine Fehlermeldung.

Aber warum, ich arbeite mit use strict;

my $test="HUMAN            ----EERTLPMLTSACPGWVRYAERVLGRPITAHLCTAKSPQQVMGSLVKDYFARQQ---";
$test=~/(\w*)\s{4,}(\w*)\n/;
#%alignment= ( $1 => $2);
print $1;
print "\n\n\n\n";
print $2;

Wo liegt hier das Problem?

  1. my $test="HUMAN            ----EERTLPMLTSACPGWVRYAERVLGRPITAHLCTAKSPQQVMGSLVKDYFARQQ---";
    $test=~/(\w*)\s{4,}(\w*)\n/;

    du suchst ein Ergebnis vor einem Zeilenumbruch, der ist aber in deinem String nicht drin.

    Struppi.

  2. Servus

    Ich wundere mich über eine Fehlermeldung hier,
    die Zeilen wo ich mir das $1 und $2 ausgeben lassen will produzieren eine Fehlermeldung.

    Aber warum, ich arbeite mit use strict;
    print $1;

    Grundlegendes
    Variablen werden in PHP dargestellt durch ein Dollar-Zeichen ($) gefolgt vom Namen der Variablen. Bei Variablen-Namen wird zwischen Groß- und Kleinschreibung unterschieden (case-sensitive).

    Variablen-Namen werden in PHP nach den gleichen Regeln wie andere Bezeichner erstellt. Ein gültiger Variablen-Name beginnt mit einem Buchstaben oder einem Unterstrich ("_"), gefolgt von einer beliebigen Anzahl von Buchstaben, Zahlen oder Unterstrichen. Als regulärer Ausdruck (regular expression) würde das wie folgt ausgedrückt: '[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*'.

    1. hallo nurso,

      Grundlegendes

      grundlegend ist, dass ein posting mit einer begruessung
      beginnen sollte, und mit einem gruss enden. ein wenig
      umgangsformen sollte man schon erwarten koennen. die
      meisten die sich mit php beschaeftigen, kennen die
      auszeichnung von variablen und das zwischen gross- und
      kleinschreibung unterschieden wird. toll dass du dich
      so sehr engagierst, aber es geht in diesem fall um die
      programmiersprache perl. bitte lese die fragestellung
      aufmerksam durch bevor du eine antwort schreibst. dies
      mit sonnigen gruessen vom bodensee,

      michael

      ss:) zu:) ls:& fo:) de:> va:) ch:? n4:& rl:? br:< js:| ie:% fl:{ mo:|

      1. hallo michael
        gelobe besserung.
        hatte das posting nur überflogen.
        also nichts für ungut nurso.

    2. Hallo,

      Aber warum, ich arbeite mit use strict;
      print $1;
      Grundlegendes
      Variablen werden in PHP

      Der Themenbereich ist Perl - nicht PHP.

      Variablen-Namen werden in PHP nach den gleichen Regeln wie andere Bezeichner erstellt. Ein gültiger Variablen-Name beginnt mit einem Buchstaben oder einem Unterstrich ("_"), gefolgt von einer beliebigen Anzahl von Buchstaben, Zahlen oder Unterstrichen.

      was aber nichts daran ändert, dass du z.B. bei preg_replace (in Perl ist das genauso) im zweiten Parameter mit $0,$1,$2,... und $9 arbeiten kannst (siehe http://de3.php.net/preg_replace).

      Als regulärer Ausdruck (regular expression) würde das wie folgt ausgedrückt: '[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*'.

      schön kopiert: http://de2.php.net/manual/de/language.variables.php ...

      Grüße aus Nürnberg
      Tobias

      --
      Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
  3. Halihallo Schnaps

    Ich wundere mich über eine Fehlermeldung hier,

    Es sind Warnmeldungen.

    die Zeilen wo ich mir das $1 und $2 ausgeben lassen will produzieren eine Fehlermeldung.

    Warnmeldung!

    Aber warum, ich arbeite mit use strict;

    Schön für dich, aber "use warnings" (-w) verursacht die
    _Warnmeldungen_, nicht "use strict". Aber schön für uns beide, dass
    du beide verwendest.

    my $test="HUMAN            ----EERTLPMLTSACPGWVRYAERVLGRPITAHLCTAKSPQQVMGSLVKDYFARQQ---";
    $test=~/(\w*)\s{4,}(\w*)\n/;
    Wo liegt hier das Problem?

    Nun ja, erstens: \n gibts net im String. Das wurde bereits gesagt.
    Zweitens: Wenn du den ganzen String matchen willst, solltest du dies
    Perl mitteilen: ^ und $ für Stringanfang und -ende setzen.
    Drittens: '----' ist kein "Wortzeichen", zweites \w* ist falsch.

    Fazit:
    my $test="HUMAN            ----EERTLPMLTSACPGWVRYAERVLGRPITAHLCTAKSPQQVMGSLVKDYFARQQ---";
    $test=~/^(\w*)\s{4,}(.*?)$/;
    print $1;
    print "\n\n\n\n";
    print $2;

    z.B.

    Viele Grüsse

    Philipp

    --
    The only program that runs perfectly every time, is a virus.