$_ in Schleifen
Wolfgang
- perl
Bakanntlich kann man $_ als Schleifenvariable verwenden, z.B.
foreach(@Zahlen) {
print $_, "\n";
}
Gibt es eine ähnliche Nöglichkeit, wenn man in der Schleife eine weitere Schleife hat?
foreach(@Zahlen) {
print $_, "\n";
foreach (@namen) {
print ?????, "\n";
}
}
Schönen Tag
Hallo Wolfgang,
Gibt es eine ähnliche Nöglichkeit, wenn man in der Schleife eine weitere Schleife hat?
foreach(@Zahlen) {
print $_, "\n";
foreach (@namen) {
print ?????, "\n";
}
}
die Lösung steht in SELFHTML und lautet:
foreach(@zahlen) {
print "$_\n";
foreach $unter (@name) {
print "$_: $unter\n";
}
}
mit use strict dann "foreach my $unter (@name)" - sieht in der Tat ein bisschen verrückt aus.
Grüße,
Sven
Hallo Sven,
danke für die Hilfe.
foreach(@zahlen) {
print "$_\n";
foreach $unter (@name) {
print "$_: $unter\n";
}
}
Ich nehme an, $unter ist eine beliebig zu wählende Variable
und die Kurzform mit einem reserviertem Wort geht damit nur einmal innerhalb einer verschachtelten Schleife.
Ich hatte gehofft, es gäbe etwas in der Art
1. Schleife $_
2. Schleife $1_
usw.
Hallo Wolfgang,
Ich nehme an, $unter ist eine beliebig zu wählende Variable
jepp
und die Kurzform mit einem reserviertem Wort geht damit nur einmal innerhalb einer verschachtelten Schleife.
selbstverständlich
Ich hatte gehofft, es gäbe etwas in der Art
- Schleife $_
- Schleife $1_
Variablennamen können wie in den meisten anderen Programmiersprachen nicht mit einer Zahl beginnen.
Siehe auch SELFHTML:
http://de.selfhtml.org/perl/sprache/schleifen.htm#foreach
Grüße,
sven
Hallo
Schon mal probiert was folgendes machen würde?
@testlist = ("Test1","Test2","Test3");
@zahllist = (1,2,3);
foreach(@zahllist) {
print "$_ ";
foreach(@testlist) {
print "$_ ";
}
print "\n";
}
Geht natürlich auch, weil in $_ immer das enthält was gerade aus der Liste gelesen wurde. Also ist dann die Ausgabe.
1 Test1 Test2 Test3
2 Test1 Test2 Test3
3 Test1 Test2 Test3
Moin,
Geht natürlich auch, weil in $_ immer das enthält was gerade aus der Liste gelesen wurde. Also ist dann die Ausgabe.
begründet dadurch, dass $_ in jeder Schleife lokal neu definiert wurde. Das ist genau das gleiche wie z.B.
my $bla = "hallo";
echo $bla;
if($bla) {
my $bla = " dallo ";
echo $bla;
}
echo $bla;
um mal was ganz triviales zu nehmen. Das $bla im Container ist folglich nicht das gleiche $bla wie draußen und ausgegeben wird "hallo dallo hallo", nicht etwa "hallo dallo dallo". *SCNR*
;-)
Grüße,
Sven
gudn tach!
Variablennamen können wie in den meisten anderen Programmiersprachen nicht mit einer Zahl beginnen.
perl -e "$_='ach ja?';print 'do'.$1.'!' if /(?:a)(..)/;"
prost
seth
Hallo seth,
Variablennamen können wie in den meisten anderen Programmiersprachen nicht mit einer Zahl beginnen.
perl -e "$_='ach ja?';print 'do'.$1.'!' if /(?:a)(..)/;"
$1 bis $10 sind reservierte Namen für Regex-Matchings. Siehe SELFHTML, Perl-Sektion. $4hallo oder $2007ist_einNeuesjahr sind keine gültigen Variablennamen in Perl.
Grüße,
Sven
gudn tach!
Variablennamen können wie in den meisten anderen Programmiersprachen nicht mit einer Zahl beginnen.
perl -e "$_='ach ja?';print 'do'.$1.'!' if /(?:a)(..)/;"
$1 bis $10 sind reservierte Namen für Regex-Matchings.
und um solche ging es. (dass man $_ auch writable ist, ist hierbei zweitrangig)
prost
seth
gudn tach!
Variablennamen können wie in den meisten anderen Programmiersprachen nicht mit einer Zahl beginnen.
perl -e "$_='ach ja?';print 'do'.$1.'!' if /(?:a)(..)/;"
$1 bis $10 sind reservierte Namen für Regex-Matchings.
und um solche ging es. (dass man $_ auch writable ist, ist hierbei zweitrangig)
als ergaenzung: auch das handbuch (perldoc perlre) bezeichnet $1, $2, ... als variablen.
prost
seth
Am besten wäre wohl, Du vergisst den Unterstrich und schreibst immer sinngemaess:
my $zeile_brot;
my $zeile_butter;
my $zeile_kaese;
my @jede_menge_kaese_brote;
foreach $zeile_brot (@erst_brot)
{
foreach $zeile_butter (@dann_butter)
{
foreach $zeile_kaese (@zuletzt_kaese)
{
push (@jede_menge_kaese_brote,"$zeile_brot;$zeile_butter;$zeile_kaese");
}
}
}
einfach von anfang an so angewöhnen ... sonst kommen schlimme verwechslungen raus ... wie gesagt sinngemaess :)
Sonntags-Gruesse Gustl
Moin!
einfach von anfang an so angewöhnen ... sonst kommen schlimme verwechslungen raus ... wie gesagt sinngemaess :)
Sagen wir mal so: Man sollte wissen, wann man das eine und wann man das andere verwendet.
Die beiden sind nämlich nicht funktionsidentisch wie man hier schön sieht:
#!/usr/bin/perl
use strict;
use warnings;
my @anfang=qw/Es war einmal ein Vater/;
my @ende=qw/so leben sie noch heute/;
my %zuordnung;
@zuordnung{@anfang}= @ende;
print "1. ";
foreach (@anfang) {
print " $_";
}
print ".\n";
print "1a.";
foreach my $t (@anfang) {
$_= $zuordnung{$t};
print " $_";
}
print ".\n";
print "2. ";
foreach (@anfang) {
print " $_";
}
print ".\n";
print "2a.";
foreach (@anfang) {
$_= $zuordnung{$_};
print " $_";
}
print ".\n";
print "3. ";
foreach (@anfang) {
print " $_";
}
print ".\n";
Ergebnis:
1. Es war einmal ein Vater.
1a. so leben sie noch heute.
2. Es war einmal ein Vater.
2a. so leben sie noch heute.
3. so leben sie noch heute.
-- Skeeve
gudn tach!
einfach von anfang an so angewöhnen ... sonst kommen schlimme verwechslungen raus ... wie gesagt sinngemaess :)
Sagen wir mal so: Man sollte wissen, wann man das eine und wann man das andere verwendet.Die beiden sind nämlich nicht funktionsidentisch wie man hier schön sieht:
hmm, *gruebel*. ich finde nicht, dass man da gross einen unterschied sieht und bin sogar eher der meinung, dass da kein unterschied besteht, denn
foreach my $t (@anfang){
$_= $zuordnung{$t};
print $_;
}
ist das gleiche wie
my $t
foreach (@anfang){
$t= $zuordnung{$_};
print $t;
}
und
foreach (@anfang){
$_= $zuordnung{$_};
}
ist das gleiche wie
foreach my $t (@anfang){
$t= $zuordnung{$t};
}
also entweder man verwendet die eine oder die andere moeglichkeit. beide zusammen geht halt nicht:
foreach my $t (@anfang){
print $_;
}
wuerde eine fehlermeldung ("uninitialized value") liefern.
prost
seth
Moin!
;-) Deine Argumente sind nicht von der Hand zu weisen!
-- Skeeve