Perl print
Scratchy
- perl
Hallo,
wie kann ich einen print über mehrere Zeilen machen?
print "Schau
mer
mal";
Ausgabe ist:
Schau
mer
mal
> Nicht OK
print "Schau\
mer\
mal";
Ausgabe ist:
Schau
mer
mal
> Nicht OK
print "Schau";
print "mer";
print "mal";
Ausgabe ist:
Schau mer mal
> OK, aber ich möchte ungern mehrere prints machen
ciao,
Scratchy
Hi Scratchy,
indem du mit \n ein Zeilenumbruch einfügst.
print "Hello\nWorld"
MfG
Otto
indem du mit \n ein Zeilenumbruch einfügst.
print "Hello\nWorld"
>
Das war nicht meine Frage. Ich möchte eben keinen Zeilenumbruch in der Ausgabe, sondern nur im Quelltext meinen print über mehrere zeilen.
Das war nicht meine Frage. Ich möchte eben keinen Zeilenumbruch in der Ausgabe, sondern nur im Quelltext meinen print über mehrere zeilen.
Da gibt es mehrere Möglichkeiten, such dir eine aus: http://perldoc.perl.org/perlop.html
Struppi.
»» Das war nicht meine Frage. Ich möchte eben keinen Zeilenumbruch in der Ausgabe, sondern nur im Quelltext meinen print über mehrere zeilen.
Da gibt es mehrere Möglichkeiten, such dir eine aus: http://perldoc.perl.org/perlop.html
Struppi.
Ich finde nicht, wie ich mit einem einfach "print" das machen.
» »» Das war nicht meine Frage. Ich möchte eben keinen Zeilenumbruch in der Ausgabe, sondern nur im Quelltext meinen print über mehrere zeilen.
»
» Da gibt es mehrere Möglichkeiten, such dir eine aus: http://perldoc.perl.org/perlop.html
»
» Struppi.Ich finde nicht, wie ich mit einem einfach "print" das machen.
print <<EOF;
hier kannst du mehrere Zeilen eingeben
EOF
oder
print q{
hier kannst du mehrere Zeilen eingeben
};
Struppi.
print <<EOF;
hier kannst du mehrere Zeilen eingeben
EOF
> oder
> ~~~perl
print q{
> hier kannst du mehrere Zeilen eingeben
> };
Das ist aber nicht das was ich will. Ich möchte mehrer Zeilen im Quelltext angeben, aber nicht in der Ausgabe:
print q{ Schau
mer
mal};
Gibt aus:
Schau
mer
mal
Ich will aber:
Schau mer mal
Schreib dir deine eigene Printausgabe.
print() ist print() und kein konfigurierbarer Filter.
Habe ich dir schon gesagt.
mfg Beat
Schreib dir deine eigene Printausgabe.
print() ist print() und kein konfigurierbarer Filter.Habe ich dir schon gesagt.
Wenn print das schon mitbringt, dann muss ich ja keine eigene Funktion schreiben. Ich will das Rad nicht neu erfinden. Bislang kam aber noch nicht diese Aussage.
Und ich halte das für so elementar bzw. alltäglich, dass ich mich echt wundern würde, wenn print sowas wie
print "Schau\
mer\
mal";
nicht kann. Ich dachte das wäre nur eine Syntaxfrage und artet nicht in einen workaround mit eigener Funktion aus ...
Wenn print das schon mitbringt, dann muss ich ja keine eigene Funktion schreiben. Ich will das Rad nicht neu erfinden. Bislang kam aber noch nicht diese Aussage.
Und ich halte das für so elementar bzw. alltäglich, dass ich mich echt wundern würde, wenn print sowas wie
print "Schau\
mer\ mal";
> nicht kann. Ich dachte das wäre nur eine Syntaxfrage und artet nicht in einen workaround mit eigener Funktion aus ...
"\
"
ist nicht das Gleiche wie "\\n"
Im zweiten Fall sieht perl einen backslash, den es zu schützen hat.
Im ersten Fall ist die Newline im Code. und Perl manipuliert wegen Dir nicht den Perlcode.
Eine Sub ist wirklich schnell gemacht.
my $t = "a\r\nb";
prxn($t);
sub prxn{
print map{ $\_=~ s/\r|\n//g; $\_ } @\_;
}
Fielehandle Bewusstsein, kannst du selber hinzudichten.
mfg Beat
--
><o(((°> ><o(((°>
<°)))o>< ><o(((°>o
Der Valigator leibt diese Fische
Das ist aber nicht das was ich will. Ich möchte mehrer Zeilen im Quelltext angeben, aber nicht in der Ausgabe:
Dann solltest du dein Problem exakt beschreiben. In einer Webumgebung z.b., werden auch nicht mehrere Zeilen ausgegeben. Aber wenn du in einer Zechenkette Zeilenumbrüche hast und diese in einer Konsole ausgeben willst, werden diese natürlich angezeigt, d.h. du musst in dem Fall die Newlinezeichen ausfiltern. Da führt kein Weg dran vorbei.
Struppi.
Das war nicht meine Frage. Ich möchte eben keinen Zeilenumbruch in der Ausgabe, sondern nur im Quelltext meinen print über mehrere zeilen.
Dann höre auf, Newlines an den print Befehl zu übergeben.
Schreibe deine eigene Printroutine, die \n und \r vorher wegfiltert.
mfg Beat
seltsame frage...
hab hier kein perl zum testen (zum Glück), aber wenn du print ne Liste übergibst, trennt er nur mit dem Inhalt von $,
$,=" ";
print "schau",
"mer",
"mal";
oder willst du dir die " sparen dann nimm qw//
, dass sollte imho auch über mehrere Zeilen funzen.
cheers
LanX
oder willst du dir die " sparen dann nimm
qw//
, dass sollte imho auch über mehrere Zeilen funzen.
qw( Leider nicht bei Worten,
die als solche noch erkenntlich sein sollten );
mfg Beat
qw( Leider nicht bei Worten,
die als solche noch erkenntlich sein sollten );
Ich denke du meinst Wörter, aber ich kann dir nicht folgen. Hab gerade kein Perl zum testen...
oder gehts darum dass das Komma ein Warning erzeugt?
quote like operators
ciao
rolf
oder gehts darum dass das Komma ein Warning erzeugt?
quote like operators
Nein, qw() trennt eine Zeichenkette an den Leerstellen und gibt eine Liste zurück. Mit print qw() wird also nur ein Leerzeichenloses Wort erzeugt. Ich hatte allerdings zwei Tage vorher auf einen sinnvolleren Operator hingewiesen.
Struppi.
$,=" "; # Wer lesen kann ist klar im Vorteil!
print "schau",
"mer",
"mal";
» ~~~perl
» $,=" "; # Wer lesen kann ist klar im Vorteil!
» print "schau",
» "mer",
» "mal";
»
Danke. gelesen hatte ich es, war mir aber nicht ganz sicher wie sich das auswirkt, obwohl du es ja sogar gesagt hattest.
Man sollte die vordefinierten Variablen aber mit local verwenden, da es sonst im Skript zu unerwarteten Dingen führen kann. also:
~~~perl
{
local $,=" ";
print qw("Schau
mer
mal";
Ausgabe ist:
Schau
mer
mal);
}
Struppi.