Daniel_T: Einsetzen einer Variable in einen Platzhalter

Hallo!

Möchte folgendes realisieren:
Ich hab eine Textdatei, die les ich aus, und es sind irgendwo im Text "Keywords", die ich beim auslesen und vor dem ausgeben austauschen möchte.

Angenommen, ich hab in einer Zeile "Hallo $keyword_name" stehen, und ausgegeben werden soll anstatt $keyword_name ein Name, denn ich in einer Variable hab.

Ein reines $line = s/$keyword/$variable/ funktioniert nicht, da dann wirklich "$variable" und nicht dessen Inhalt im ausgegebenen Text steht.

Wie kann ich es dann machen?

Danke!
Daniel

  1. Hi!

    Wie kann ich es dann machen?

    eval() benutzen, was aber IMHO recht unschön ist...
    Anders läßt sich dein Problem nicht angehen?

    Gruß, rob

    1. Hi!

      Hallo!

      eval() benutzen, was aber IMHO recht unschön ist...
      Anders läßt sich dein Problem nicht angehen?

      Werd ich versuchen. Naja, der Ablauf ist so Quelle-Textdatei -> Programm -> Ausgabe, und im Programm weiß ich erst, was an den diversen Stellen im Text stehen soll.

      Gruß, rob

      Baba Daniel

  2. Angenommen, ich hab in einer Zeile "Hallo $keyword_name" stehen, und ausgegeben werden soll anstatt $keyword_name ein Name, denn ich in einer Variable hab.

    Ein reines $line = s/$keyword/$variable/ funktioniert nicht, da dann wirklich "$variable" und nicht dessen Inhalt im ausgegebenen Text steht.

    suchst du evtl. sowas wie HTML::Template?

    wenn es wirklich nur way einfach sein soll, läßt sich das einfacher mit einem HASH realisieren.
    In etwa so:

    #!/usr/bin/perl -w  
      
    use strict;  
    my $text = <<"TXT";  
    Hallo %NAME%!  
    TXT  
      
    my %hash =(  
    NAME => 'Struppi'  
    );  
      
    $text =~ s/%([^%]+)%/$hash{$1}/g;  
    print $text;
    

    Struppi.

    1. wenn es wirklich nur way einfach sein soll, läßt sich das einfacher mit einem HASH realisieren.
      In etwa so:

      #!/usr/bin/perl -w

      use strict;
      my $text = <<"TXT";
      Hallo %NAME%!
      TXT

      my %hash =(
      NAME => 'Struppi'
      );

      $text =~ s/%([^%]+)%/$hash{$1}/g;
      print $text;

        
      Das ist genau das, was ich gesucht hab, funktioniert blendend :)  
        
      
      > Struppi.  
      
      Vielen Dank!  
      Daniel