frage zu "ODER"

frage zu "ODER"

am 21.05.2006 14:31:06 von alexander kainz

hallo

ich möchte ein aktion ausführen, wenn
eine variable den wert 1 oder 3 oder 4 hat.

ich dachte das würde mit z.b. mit

print "$i\n" if $i == (1|3|4);

funktionieren - jedoch gefehlt!

könnt ihr mit den richtigen string nennen?

greets
-/--\-
alex

Re: frage zu "ODER"

am 21.05.2006 14:32:44 von Bjoern Hoehrmann

* alexander kainz wrote in de.comp.lang.perl.misc:
>ich möchte ein aktion ausführen, wenn
>eine variable den wert 1 oder 3 oder 4 hat.
>
>ich dachte das würde mit z.b. mit
>
> print "$i\n" if $i == (1|3|4);
>
>funktionieren - jedoch gefehlt!

In Perl5 ist der einfachste Weg if $i == 1 or $i == 3 or ... Natürlich
gibt es andere Möglichkeiten je nachdem wie die Daten vorliegen, welche
Menge an Daten es zu verarbeiten gibt, ob du Module verwenden willst,
und so weiter.
--
Björn Höhrmann · mailto:bjoern@hoehrmann.de · http://bjoern.hoehrmann.de
Weinh. Str. 22 · Telefon: +49(0)621/4309674 · http://www.bjoernsworld.de
68309 Mannheim · PGP Pub. KeyID: 0xA4357E78 · http://www.websitedev.de/

Re: frage zu "ODER"

am 21.05.2006 14:33:52 von Lars Klemstein

alexander kainz wrote:
> ich möchte ein aktion ausführen, wenn
> eine variable den wert 1 oder 3 oder 4 hat.
[...]

Du hast hierfür 2 Möglichkeiten:

1. Vergleichsoperationen:
print "$i\n" if $i == 1 || $i == 2 || $i == 4;

2. Regex:
print "$i\n" if $i =~/^[124]$/;

(von ^(1|2|4)$/ würde ich absehen)


Gruß,
Lars Klemstein

Re: frage zu "ODER"

am 21.05.2006 19:24:57 von Slaven Rezic

"alexander kainz" writes:

> hallo
>
> ich möchte ein aktion ausführen, wenn
> eine variable den wert 1 oder 3 oder 4 hat.
>
> ich dachte das würde mit z.b. mit
>
> print "$i\n" if $i == (1|3|4);
>
> funktionieren - jedoch gefehlt!
>
> könnt ihr mit den richtigen string nennen?
>

Eine ähnliche Syntax wird wohl mit Perl6 möglich sein.

Gruß,
Slaven

--
Slaven Rezic - slaven rezic de

Tk-AppMaster: a perl/Tk module launcher designed for handhelds
http://tk-appmaster.sf.net

Re: frage zu "ODER"

am 21.05.2006 23:27:50 von hjp-usenet2

Lars Klemstein wrote:
> alexander kainz wrote:
>> ich möchte ein aktion ausführen, wenn
>> eine variable den wert 1 oder 3 oder 4 hat.
> [...]
>
> Du hast hierfür 2 Möglichkeiten:
>
> 1. Vergleichsoperationen:
> print "$i\n" if $i == 1 || $i == 2 || $i == 4;
>
> 2. Regex:
> print "$i\n" if $i =~/^[124]$/;
>
> (von ^(1|2|4)$/ würde ich absehen)

Warum? Im Gegensatz zur Character-Class ist das problemlos auf Zahlen >
9 erweiterbar.

Einen habe ich noch:

print "$i\n" if grep { $i == $_ } qw(1 2 4);

hp

--
_ | Peter J. Holzer | Man könnte sich [die Diskussion] auch
|_|_) | Sysadmin WSR/LUGA | sparen, wenn man sie sich einfach sparen
| | | hjp@hjp.at | würde.
__/ | http://www.hjp.at/ | -- Ralph Angenendt in dang 2006-04-15

Re: frage zu "ODER"

am 22.05.2006 13:45:37 von Ferry Bolhar

Lars Klemstein:

> 2. Regex:
> print "$i\n" if $i =~/^[124]$/;
>
> (von ^(1|2|4)$/ würde ich absehen)

Naja, es ist zwar nicht so effizient wie eine Zeichenklasse,
(was aber bei dem Suchausdruck wohl vernachlässigbar ist),
würde aber dafür auch zwei- und mehrstellige Werte erlauben,
so sich deren Umfang in Grenzen hält.

LG, Ferry

--
Ing. Ferry Bolhar
Municipality of Vienna, Department 14
A-1010 Vienna / AUSTRIA
E-mail: bol@adv.magwien.gv.at

Re: frage zu "ODER"

am 22.05.2006 14:12:47 von Mirco Wahab

Hallo Peter

> Einen habe ich noch:
>
> print "$i\n" if grep { $i == $_ } qw(1 2 4);
>

Oder das verwandte:

use List::Util qw(first);

$i = 3;
print "$i\n" if first {$i == $_} (1, 3, 4);


Viele Grüße

M.

Re: frage zu "ODER"

am 23.05.2006 11:20:24 von KWittrock

"alexander kainz" schrieb im Newsbeitrag
news:44705cfb$0$586$79720d31@newsreader.inode.at...
.....
> ich dachte das würde mit z.b. mit
>
> print "$i\n" if $i == (1|3|4);
>
> funktionieren - jedoch gefehlt!

Es geht auch so:
use Switch;
switch ($i) {case [1, 3, 4] {print "$i\n"}}

Das kannst du noch etwas vereinfachen, wenn du dir eine Sub baust:
sub suche {use Switch; switch ($_[0]) {case ($_[1]) {return 1}}};
print "$i\n" if suche($i, [1, 3, 4]);

Gruß
Klaus

Re: frage zu "ODER"

am 23.05.2006 12:07:02 von Robert Sedlacek

alexander kainz wrote

> print "$i\n" if $i == (1|3|4);
>
> funktionieren - jedoch gefehlt!
>
> könnt ihr mit den richtigen string nennen?

Siehe zB Perl6::Junction -

print "$i\n" if any( 1, 2, 3 ) == $i;


hth, p

--
thou shallst fear ..

Re: frage zu "ODER"

am 23.05.2006 12:28:22 von Wolf Behrenhoff

Robert Sedlacek schrieb:
> Siehe zB Perl6::Junction -
>
> print "$i\n" if any( 1, 2, 3 ) == $i;

Hm, irgendwie erinnert mich das an Quantum::Superpositions!

use Quantum::Superpositions;
print "ja" if any( 1, 2, 3 ) == <>;

Bei Junction denke ich irgendwie immer an harte Links auf NTFS :-)

Wolf

Re: frage zu "ODER"

am 23.05.2006 21:09:53 von Slaven Rezic

Wolf Behrenhoff writes:

> Robert Sedlacek schrieb:
> > Siehe zB Perl6::Junction -
> >
> > print "$i\n" if any( 1, 2, 3 ) == $i;
>
> Hm, irgendwie erinnert mich das an Quantum::Superpositions!
>
> use Quantum::Superpositions;
> print "ja" if any( 1, 2, 3 ) == <>;
>
> Bei Junction denke ich irgendwie immer an harte Links auf NTFS :-)
>

Mit perl 5.10 (und bereits mit 5.9.x) ist folgendes möglich:

#!/usr/local/bin/perl5.9.4
use feature ':5.10';
$i = 1;
say "yes" if $i ~~ [1..3];
__END__

Gruß,
Slaven

--
Slaven Rezic - slaven rezic de

need xpm or ppm output from GD?
http://search.cpan.org/search?mode=module&query=GD::Convert

Re: frage zu "ODER"

am 24.05.2006 08:49:32 von Ferry Bolhar

Slaven Rezic:

> Mit perl 5.10 (und bereits mit 5.9.x) ist folgendes möglich:

Wo habt ihr diese Versionen (und Feature.pm) her? Meine
aktuelleste Version ist 5.8.8.

Ist 5.10 eine für Produktionstwecke freigegebene Version?
Gibt es Dokumentation über die Neuheiten von 5.9 und 5.10?
Ist 5.8.8 die letzte 5.8 Version?

Danke für eure Antworten und schöne Grüße aus Wien,

Ferry

--
Ing. Ferry Bolhar
Municipality of Vienna, Department 14
A-1010 Vienna / AUSTRIA
E-mail: bol@adv.magwien.gv.at

Re: frage zu "ODER"

am 24.05.2006 13:29:38 von Christian Lackas

* Ferry Bolhar [2006-05-24]:

Hallo Ferry,

> > Mit perl 5.10 (und bereits mit 5.9.x) ist folgendes möglich:
> Wo habt ihr diese Versionen (und Feature.pm) her? Meine
> aktuelleste Version ist 5.8.8.

diese Daten, wie auch alles andere zu Perl, findet sich -- wie immer --
im CPAN.

> Ist 5.10 eine für Produktionstwecke freigegebene Version?
> Gibt es Dokumentation über die Neuheiten von 5.9 und 5.10?
> Ist 5.8.8 die letzte 5.8 Version?

Auch das wird dort umfassend beantwortet:

http://www.cpan.org/src/README.html

Gruß
Christian

--
Für das große Chaos haben wir Computer.
Die übrigen Fehler machen wir von Hand.
http://www.lackas.net/ Perl Delphi Linux MP3 Searchengines Domainchecker

Re: frage zu "ODER"

am 24.05.2006 16:50:17 von Ferry Bolhar

Hallo Christian,

vielen Dank für deine Antwort.

>>> Mit perl 5.10 (und bereits mit 5.9.x) ist folgendes möglich:
> > Wo habt ihr diese Versionen (und Feature.pm) her? Meine
> > aktuelleste Version ist 5.8.8.
>
> diese Daten, wie auch alles andere zu Perl, findet sich -- wie immer --
> im CPAN.

Über 5.10 habe - zumindest ich - nichts im CPAN gefunden.

Schön wäre es auch, wenn man sich die "Release Notes" (das dürften
wohl die *delta.pod Dateien sein) ansehen könnte, ohne gleich den
ganzen Kit runterladen zu müssen.

Auf http://perldoc.perl.org gibt es wohl delta-Dateien äterer Versionen
(bis zurück zu 5.004), aber leider keine neueren, sondern die gesamte
Doku bezieht sich auf die aktuelle 5.8.8 Version. Daher meine Frage;
es geht mir nur um Dokumentation, white papers usw.

Generell interessiert mich, was es in 5.10 an Neuheiten geben wird,
damit ich jetzt schon überlegen kann, ob und wann wir 5.10 einsetzen
werden, da ich die Aufwände entsprechend im Voraus planen muss.

Eigentlich wollte ich nach 5.8.8 gleich bis 6 warten, aber da sich die
Auslieferung von Perl6 ja weiterhin verzögert (falls sie überhaupt in
einigermaßen absehbarer Zeit kommt), muss ich ein Upgrade auf 5.10
eben auch ins Auge fassen.

Nochmals schönen Dank für deine Antwort, und schöne Grüße aus
Wien,

Ferry

--
Ing. Ferry Bolhar
Municipality of Vienna, Department 14
A-1010 Vienna / AUSTRIA
E-mail: bol@adv.magwien.gv.at

Re: frage zu "ODER"

am 24.05.2006 19:54:21 von Slaven Rezic

"Ferry Bolhar" writes:

> Hallo Christian,
>
> vielen Dank für deine Antwort.
>
> >>> Mit perl 5.10 (und bereits mit 5.9.x) ist folgendes möglich:
> > > Wo habt ihr diese Versionen (und Feature.pm) her? Meine
> > > aktuelleste Version ist 5.8.8.
> >
> > diese Daten, wie auch alles andere zu Perl, findet sich -- wie immer --
> > im CPAN.
>
> Über 5.10 habe - zumindest ich - nichts im CPAN gefunden.
>
> Schön wäre es auch, wenn man sich die "Release Notes" (das dürften
> wohl die *delta.pod Dateien sein) ansehen könnte, ohne gleich den
> ganzen Kit runterladen zu müssen.

Du könntest zum Beispiel per rsync den ganzen Perl-Source-Baum oder
auch nur Teile davon downloaden. Siehe
http://dev.perl.org/perl5/source.html

Gruß,
Slaven

--
Slaven Rezic - slaven rezic de

tknotes - A knotes clone, written in Perl/Tk.
http://ptktools.sourceforge.net/#tknotes

Re: frage zu "ODER"

am 25.05.2006 18:00:43 von Christian Lackas

* Ferry Bolhar [2006-05-24]:

Hallo Ferry,

> Über 5.10 habe - zumindest ich - nichts im CPAN gefunden.

das gibt es ja auch noch nicht, weil es nicht released wurde.

> Schön wäre es auch, wenn man sich die "Release Notes" (das dürften
> wohl die *delta.pod Dateien sein) ansehen könnte, ohne gleich den
> ganzen Kit runterladen zu müssen.

http://perldoc.perl.org/index-history.html

> Generell interessiert mich, was es in 5.10 an Neuheiten geben wird,
> damit ich jetzt schon überlegen kann, ob und wann wir 5.10 einsetzen
> werden, da ich die Aufwände entsprechend im Voraus planen muss.

Dann solltest du am besten die entsprechenden Entwickler-Mailinglisten
abonnieren. Was in 5.10 alles genau drin sein wird weiss heute noch
keiner.

> Eigentlich wollte ich nach 5.8.8 gleich bis 6 warten, aber da sich die
> Auslieferung von Perl6 ja weiterhin verzögert (falls sie überhaupt in
> einigermaßen absehbarer Zeit kommt), muss ich ein Upgrade auf 5.10
> eben auch ins Auge fassen.

Perl6 wirst du wohl noch auf Jahre hinaus nicht als Ersatz für Perl5 im
Produktiveinsatz haben wollen. Dafür wird sich da einfach viel zu viel
ändern.
Gibt es einen Grund, warum du gleich von 5.8.8 weg willst? Hast du damit
irgendwelche Probleme, die du hoffst gelöst zu bekommen? Von reiner
Versionitis halte ich persönlich nicht so viel...

Gruß
Christian

Re: frage zu "ODER"

am 25.05.2006 22:59:40 von hjp-usenet2

Ferry Bolhar wrote:
> Eigentlich wollte ich nach 5.8.8 gleich bis 6 warten, aber da sich die
> Auslieferung von Perl6 ja weiterhin verzögert (falls sie überhaupt in
> einigermaßen absehbarer Zeit kommt),

Du kannst ja den Leo (und einige andere) übernächste Woche persönlich
fragen, wann Perl 6 kommt:

http://conferences.mongueurs.net/apw2006/

hp (schleichwerbend)

--
_ | Peter J. Holzer | Man könnte sich [die Diskussion] auch
|_|_) | Sysadmin WSR/LUGA | sparen, wenn man sie sich einfach sparen
| | | hjp@hjp.at | würde.
__/ | http://www.hjp.at/ | -- Ralph Angenendt in dang 2006-04-15

Re: frage zu "ODER"

am 26.05.2006 19:45:52 von Oliver Block

alexander kainz wrote:

> hallo
>
> ich möchte ein aktion ausführen, wenn
> eine variable den wert 1 oder 3 oder 4 hat.
>
> ich dachte das würde mit z.b. mit
>
> print "$i\n" if $i == (1|3|4);
>
> funktionieren - jedoch gefehlt!

(1|2|4) liefert vermutlich in jedem Fall true zurück. Falls ja, wird immer
gedruckt wenn $i nicht 0 ist.

Mögliche Lösungen haben ja schon andere genannt.

Gruss,

Oliver

Re: frage zu "ODER"

am 26.05.2006 21:33:01 von hjp-usenet2

Oliver Block wrote:
> alexander kainz wrote:
>> ich möchte ein aktion ausführen, wenn
>> eine variable den wert 1 oder 3 oder 4 hat.
>>
>> ich dachte das würde mit z.b. mit
>>
>> print "$i\n" if $i == (1|3|4);
>>
>> funktionieren - jedoch gefehlt!
>
> (1|2|4) liefert vermutlich in jedem Fall true zurück.
^3
Ja, es liefert 7. 7 ist true.

> Falls ja, wird immer
> gedruckt wenn $i nicht 0 ist.

Nein. Nicht alle Zahlen, die ungleich Null sind, sind gleich. Sie sind
alle Individuen!

Es wird immer gedruckt, wenn $i 7 ist.

hp


--
_ | Peter J. Holzer | Man könnte sich [die Diskussion] auch
|_|_) | Sysadmin WSR/LUGA | sparen, wenn man sie sich einfach sparen
| | | hjp@hjp.at | würde.
__/ | http://www.hjp.at/ | -- Ralph Angenendt in dang 2006-04-15

Re: frage zu "ODER"

am 28.05.2006 13:54:24 von Peter Ehrenberg

"Peter J. Holzer" writes:

> [...] Einen habe ich noch:
>
> print "$i\n" if grep { $i == $_ } qw(1 2 4);

Übrigens: Weil in Ruby ein Array ein Objekt ist, kann man das dort so
schreiben:

puts i if [1,2,4].include? i

Peter
--
Dipl.-Ing. Peter Ehrenberg Tel.: +49 40 756604-40
Auf der Höhe 29 Netz: http://dipe.de/
21109 Hamburg Perl · Oracle · Linux · Netzwerk
Germany Softwareentwicklung · Installation · Administration

Re: frage zu "ODER"

am 29.05.2006 08:49:16 von Ferry Bolhar

Peter Holzer:

>> Falls ja, wird immer gedruckt wenn $i nicht 0 ist.
>
> Nein. Nicht alle Zahlen, die ungleich Null sind, sind gleich.

Im Boolschen Context (den "if" auswertet) schon.

> Sie sind alle Individuen!

Merkwürdige Definition, von Zahlen als Individuen zu sprechen.
Für mich sind Individuen vor allem mal Lebewesen, aber bitte.
Jedenfalls:

0 = logisch falsch, 1,2,3.... logisch wahr.

LG, Ferry

--
Ing. Ferry Bolhar
Municipality of Vienna, Department 14
A-1010 Vienna / AUSTRIA
E-mail: bol@adv.magwien.gv.at

Re: frage zu "ODER"

am 29.05.2006 22:30:53 von Slaven Rezic

Peter Ehrenberg writes:

> "Peter J. Holzer" writes:
>
> > [...] Einen habe ich noch:
> >
> > print "$i\n" if grep { $i == $_ } qw(1 2 4);
>
> Übrigens: Weil in Ruby ein Array ein Objekt ist, kann man das dort so
> schreiben:
>
> puts i if [1,2,4].include? i
>

In Perl kann man mittels "autoboxing" normale Datentypen zu Objekten
"adeln" und ebenfalls Methoden darauf aufrufen:

#!perl
use autobox;
use List::MoreUtils qw(first_index);
sub ARRAY::include {
my($array, $element) = @_;
-1 != first_index { $_ eq $element } @$array;
}

for $i (0,1,5) {
warn $i if [0,1,2,3]->include($i);
}
__END__

--
Slaven Rezic - slaven rezic de

Visualize XML files in a Tk text widget:
http://search.cpan.org/search?mode=module&query=Tk::XMLViewe r

Re: frage zu "ODER"

am 05.06.2006 21:22:10 von hjp-usenet2

Ferry Bolhar wrote:
> Peter Holzer:
>>> Falls ja, wird immer gedruckt wenn $i nicht 0 ist.
>>
>> Nein. Nicht alle Zahlen, die ungleich Null sind, sind gleich.
>
> Im Boolschen Context (den "if" auswertet) schon.

Da war aber kein Boolscher Kontext.

if ($i == 7) { print "ok" }

gibt hoffentlich nur dann ok aus, wenn $i den Wert 7 hat, und nicht,
wenn $i irgendeinen Wert != 0 hat,


>> Sie sind alle Individuen!
>
> Merkwrdige Definition, von Zahlen als Individuen zu sprechen.

Dein Humordetektor ist kaputt.

hp

--
_ | Peter J. Holzer | Man könnte sich [die Diskussion] auch
|_|_) | Sysadmin WSR/LUGA | sparen, wenn man sie sich einfach sparen
| | | hjp@hjp.at | würde.
__/ | http://www.hjp.at/ | -- Ralph Angenendt in dang 2006-04-15

Re: frage zu "ODER"

am 06.06.2006 10:33:15 von Ferry Bolhar

Peter J. Holzer:

>>>> Falls ja, wird immer gedruckt wenn $i nicht 0 ist.
>>>
> >> Nein. Nicht alle Zahlen, die ungleich Null sind, sind gleich.
>>
>> Im Boolschen Context (den "if" auswertet) schon.
>
> Da war aber kein Boolscher Kontext.
>
> if ($i == 7) { print "ok" }
>
> gibt hoffentlich nur dann ok aus, wenn $i den Wert 7 hat, und nicht,
> wenn $i irgendeinen Wert != 0 hat,

Es war vom boolschen Context von _Zahlen_ die Rede. Dein
Beispiel beinhaltet ja schon die Verwendung eines Operators.

> >> Sie sind alle Individuen!
> >
> > Merkwrdige Definition, von Zahlen als Individuen zu sprechen.
>
> Dein Humordetektor ist kaputt.

Vielleicht hast du recht - ein Smiley hätte da u.U. geholfen... ;-)

LG, Ferry

--
Ing. Ferry Bolhar
Municipality of Vienna, Department 14
A-1010 Vienna / AUSTRIA
E-mail: bol@adv.magwien.gv.at

Re: frage zu "ODER"

am 15.06.2006 22:19:15 von hjp-usenet2

Ferry Bolhar wrote:

> Peter J. Holzer:
>
>>>>> Falls ja, wird immer gedruckt wenn $i nicht 0 ist.
>>>>
>> >> Nein. Nicht alle Zahlen, die ungleich Null sind, sind gleich.
>>>
>>> Im Boolschen Context (den "if" auswertet) schon.
>>
>> Da war aber kein Boolscher Kontext.
>>
>> if ($i == 7) { print "ok" }
>>
>> gibt hoffentlich nur dann ok aus, wenn $i den Wert 7 hat, und nicht,
>> wenn $i irgendeinen Wert != 0 hat,
>
> Es war vom boolschen Context von _Zahlen_ die Rede.

Ja, aber das war falsch, denn dort, wo Oliver angenommen hat, dass ein
boolscher Kontext besteht, besteht eben keiner, und darauf habe ich
hingewiesen.

> Dein Beispiel beinhaltet ja schon die Verwendung eines Operators.

Das Beispiel von Alexander Kainz, um das es ging, auch. Ich zitiere:

>>>>>> print "$i\n" if $i == (1|3|4);

Einen boolschen Kontext gibt es hier nur fr den Ausdruck
$i == (1|3|4) , nicht fr seine Teilausdrcke. (1|3|4) ist ein ganz
gew�nlicher arithmetischer Ausdruck, der ein bitweises Oder von drei
Konstanten darstellt. Das Ergebnis dieses Ausdrucks ist 7. Der Code l�t
sich somit zu

print "$i\n" if $i == 7;

vereinfachen (und wie man mit perl -MO=Deparse leicht feststellen kann,
macht das der Perl-Compiler auch). Das Ergebnis dieses Vergleichs
wiederum ist 1, wenn $i den Wert 7 hat, und sonst ein Leerstring. Erst
hier kommt der Boolsche Kontext ins Spiel: 1 wird (wie jede Zahl
ungleich 0) als "wahr" angesehen, der Leerstring als falsch. Somit wird
$i dann und nur dann ausgegeben, wenn es den Wert 7 hat, nicht in jedem
Fall, wie Oliver angenommen hat.

Im brigen kann man solche Dinge auch einfach ausprobieren, man muss
nicht theoretisch darber streiten. Sowohl Dir als auch Oliver w�e es
m�lich gewesen einfach

perl -e 'for $i (0 .. 10) {print "$i\n" if $i == (1|3|4)}'

einzutippen und festzustellen, dass das in der Tat nur "7" ausgibt und
nicht alle ganzen Zahlen von 0 bis 10.


hp

--
_ | Peter J. Holzer | Man könnte sich [die Diskussion] auch
|_|_) | Sysadmin WSR/LUGA | sparen, wenn man sie sich einfach sparen
| | | hjp@hjp.at | würde.
__/ | http://www.hjp.at/ | -- Ralph Angenendt in dang 2006-04-15