Mehreren Variablen in einer Zeile einen Wert zuweisen?!

Mehreren Variablen in einer Zeile einen Wert zuweisen?!

am 04.03.2006 17:18:49 von Gerhard Wolf

Hallo,

wenn man mehrer Variablen auf einmal initialisieren kann:

my ($a,$b,$c,$d);

kann man mehren V. auch in einer Zeile einen Wert zuweisen?

($a,$b,$c,$d) = 1; # weist nur $a einen Wert zu! Warum?

Geht das in einer Zeile?

Re: Mehreren Variablen in einer Zeile einen Wert zuweisen?!

am 04.03.2006 17:29:36 von Lukas Mai

Gerhard Wolf schrob:
> Hallo,
>
> wenn man mehrer Variablen auf einmal initialisieren kann:
>
> my ($a,$b,$c,$d);

Das ist eine Variablendeklaration/-definition, keine Initialisierung.

> kann man mehren V. auch in einer Zeile einen Wert zuweisen?
>
> ($a,$b,$c,$d) = 1; # weist nur $a einen Wert zu! Warum?

Weil LISTE = LISTE werteweise verfährt:

($a, $b) = (2, 3); # $a = 2, $b = 3

Und wenn in der rechten Liste nicht genug Werte stehen, wird eben mit
undef aufgefüllt, d.h. es passiert folgendes:

($a,$b,$c,$d) = (1,undef,undef,undef);

> Geht das in einer Zeile?

Ja. Such dir was aus:

($a, $b, $c, $d) = map 1, 1 .. 4;

($a, $b, $c, $d) = (1) x 4;

$a = ($b = ($c = ($d = 1)));

$a = $b = $c = $d = 1;

$_ = 1 for $a, $b, $c, $d;

HTH, Lukas

Re: Mehreren Variablen in einer Zeile einen Wert zuweisen?!

am 04.03.2006 17:48:47 von Slaven Rezic

Gerhard Wolf writes:

> Hallo,
>
> wenn man mehrer Variablen auf einmal initialisieren kann:
>
> my ($a,$b,$c,$d);
>
> kann man mehren V. auch in einer Zeile einen Wert zuweisen?
>
> ($a,$b,$c,$d) = 1; # weist nur $a einen Wert zu! Warum?
>
> Geht das in einer Zeile?

($a,$b,$c,$d) = (1,1,1,1);

oder

($a,$b,$c,$d) = (1)x4;

--
Slaven Rezic - slaven rezic de

tkruler - Perl/Tk program for measuring screen distances
http://ptktools.sourceforge.net/#tkruler

Re: einer Variablen in einer Zeile einen Wert aus zweien zuweisen?!

am 06.03.2006 16:49:12 von f.ballandt

hallo,

ich biege mal das Thema:

öfters stehe ich vor einem anderem init-Problem (default oder anderer Wert):

my$samples=input("enter oder anzahl: ");
$samples=1024 unless $samples;


solche häßlichen Zweizeiler sollten sich doch elegant verkürzen lassen,
oder?
(ohne strict ginge leichter)

Frank

Re: einer Variablen in einer Zeile einen Wert aus zweien zuweisen?!

am 06.03.2006 16:59:11 von Ch Lamprecht

f.ballandt schrieb:
> hallo,
>
> ich biege mal das Thema:
>
> öfters stehe ich vor einem anderem init-Problem (default oder anderer
> Wert):
>
Hallo,
z.B. so :
my$samples=input("enter oder anzahl: ") ||1024;
# $samples=1024 unless $samples;
>
>
> solche häßlichen Zweizeiler sollten sich doch elegant verkürzen lassen,
> oder?
Grüße, Christoph


--

perl -e "print scalar reverse q/ed.enilno@ergn.l.hc/"

Re: einer Variablen in einer Zeile einen Wert aus zweien zuweisen?!

am 06.03.2006 17:07:56 von Ingo Menger

Ch Lamprecht schrieb:

> f.ballandt schrieb:
> > hallo,
> >
> > ich biege mal das Thema:
> >
> > öfters stehe ich vor einem anderem init-Problem (default oder anderer
> > Wert):
> >
> Hallo,
> z.B. so :
> my$samples=3Dinput("enter oder anzahl: ") ||1024;

Funktioniert aber nur sachgemäß, wenn 0 kein gültiger Wert ist.
Schreib doch sub input so, daß ein weiterer Parameter für
default-Wert übergeben wird.

Re: einer Variablen in einer Zeile einen Wert aus zweien zuweisen?!

am 06.03.2006 17:25:01 von Ch Lamprecht

Ingo Menger schrieb:
> Ch Lamprecht schrieb:
>
>
>>f.ballandt schrieb:
>>
>>>hallo,
>>>
>>>ich biege mal das Thema:
>>>
>>>öfters stehe ich vor einem anderem init-Problem (default oder anderer
>>>Wert):
>>>
>>
>>Hallo,
>>z.B. so :
>>
oder eben so:

my $samples=defined(input("enter oder anzahl: ")) ||1024;
>
>
> Funktioniert aber nur sachgemäß, wenn 0 kein gültiger Wert ist.
> Schreib doch sub input so, daß ein weiterer Parameter für
> default-Wert übergeben wird.
>

Grüße, Christoph
--

perl -e "print scalar reverse q/ed.enilno@ergn.l.hc/"

Re: einer Variablen in einer Zeile einen Wert aus zweien zuweisen?!

am 06.03.2006 17:40:04 von Ch Lamprecht

Ch Lamprecht schrieb:
> Ingo Menger schrieb:
>
>> Ch Lamprecht schrieb:
>>
>>
>>> f.ballandt schrieb:
>>>
>>>> hallo,
>>>>
>>>> ich biege mal das Thema:
>>>>
>>>> öfters stehe ich vor einem anderem init-Problem (default oder anderer
>>>> Wert):
>>>>
>>>
>>> Hallo,
>>> z.B. so :
>>>
>
> oder eben so:
>
> my $samples=defined(input("enter oder anzahl: ")) ||1024;

Hallo,
sorry - Das war natürlich quatsch!

my $test;
my $samples = defined( $test = input())? $test:'default';

Christoph
>
>>
>>
>> Funktioniert aber nur sachgemäß, wenn 0 kein gültiger Wert ist.
>> Schreib doch sub input so, daß ein weiterer Parameter für
>> default-Wert übergeben wird.
>>
>
> Grüße, Christoph


--

perl -e "print scalar reverse q/ed.enilno@ergn.l.hc/"

Re: einer Variablen in einer Zeile einen Wert aus zweien zuweisen?!

am 06.03.2006 19:04:43 von Wolf Behrenhoff

Ch Lamprecht schrieb:
> Ch Lamprecht schrieb:
>> my $samples=defined(input("enter oder anzahl: ")) ||1024;
>
> Hallo,
> sorry - Das war natürlich quatsch!
>
> my $test;
> my $samples = defined( $test = input())? $test:'default';

Siehst du, wie lang das ist und wie leicht du hierbei Fehler machen
kannst? (Du hast es ja gerade gezeigt!)

Die beste Lösung ist, einfach input einen zweiten (ggf. optionalen)
Parameter zu für input zu nehmen und dann im Programm
$test = input('xy oder enter', 1024);
aufzurufen.

Wolf

Re: einer Variablen in einer Zeile einen Wert aus zweien zuweisen?!

am 06.03.2006 22:39:44 von Slaven Rezic

"Ingo Menger" writes:

> Ch Lamprecht schrieb:
>
> > f.ballandt schrieb:
> > > hallo,
> > >
> > > ich biege mal das Thema:
> > >
> > > öfters stehe ich vor einem anderem init-Problem (default oder anderer
> > > Wert):
> > >
> > Hallo,
> > z.B. so :
> > my$samples=input("enter oder anzahl: ") ||1024;
>
> Funktioniert aber nur sachgemäß, wenn 0 kein gültiger Wert ist.
> Schreib doch sub input so, daß ein weiterer Parameter für
> default-Wert übergeben wird.
>

Oder man freut sich auf perl 5.10:

my$samples=input("enter oder anzahl: ") // 1024;

--
Slaven Rezic - slaven rezic de

Lost in your Tk widget tree? Try
http://user.cs.tu-berlin.de/~eserte/src/perl/Tk-WidgetDump/

Re: einer Variablen in einer Zeile einen Wert aus zweien zuweisen?!

am 07.03.2006 13:08:07 von struebig

Ingo Menger wrote:
>
> Ch Lamprecht schrieb:
> > z.B. so :
> > my$samples=input("enter oder anzahl: ") ||1024;
>
> Funktioniert aber nur sachgemäß, wenn 0 kein gültiger Wert ist.

Tut doch der Orginal code auch.

Struppi.

Re: einer Variablen in einer Zeile einen Wert aus zweien zuweisen?!

am 07.03.2006 14:39:16 von Ingo Menger

J Strübig schrieb:

> Ingo Menger wrote:
> >
> > Ch Lamprecht schrieb:
> > > z.B. so :
> > > my$samples=3Dinput("enter oder anzahl: ") ||1024;
> >
> > Funktioniert aber nur sachgemäß, wenn 0 kein gültiger Wert ist.
>
> Tut doch der Orginal code auch.

Stimmt, die Frage ist nur, ob das beabsichtigt ist. Und, wenn es hier
beabsichtigt war, ob es immer beabsichtigt ist, wenn man die
"häßlichen 2 Zeilen" verkürzen möchte.