Idiomatisches

Hallo,

da ich ab und zu wieder die Anwandlung
bekomme, meine Python-Kenntnisse zu
verbessern, habe ich mal in den Python-
challenge (http://www.pythonchallenge.com/)
reingeschaut.

<rant> Allerdings fand ich den "Pythonchallenge"
eher eine "Challenge" für die Verwendung von
Python überhaupt ;-) </rant>
OK, so far so good. Jeder wie er möchte ;-)

Zjm Thema: zu Level 3 ist mir ein schickes
Perl-Konstrukt eingefallen; es geht
darum, ein "Lösungswort" aus einem
Zeichenkuddelmuddel zu extrahieren
(in __DATA__ steht dieser Zeichensalat):

print split /[^a-z]/, do { local $/; (<DATA>) };

__DATA__
%%$ [at] _$^__#)^)&!_+]!* [at] &^} [at] [ [at] %]()%+$&[(_ [at] %+%$*^ [at] $^!+]!&_#)_*}{ }}!}_]$[%} [at] [{_ [at] #_^{*
[at] ##&{#&{&)*%(]{{([*} [at] [ [at] &]+!!*{)!}{%+{))])[!^})+)$]#{*+^(( [at] ^ [at] }$[**$&^{$! [at] #$%)! [at] (&
+^!{%_$& [at] ^!}$_${)$_#)!({ [at] !)(^}!*^&!$%_&&}&_#& [at] {)]{+)%*{&*%*& [at] %$+]!*__(#!*){%& [at] ++
....
....
....


Nun meine Frage dazu. Ist es üblich bzw.
'idiomatisch gebräuchlich', einen do{}-Block
so direkt in eine Liste zu expandieren - oder
sollte man das lassen?

Danke & Grüße

M.
Mirco Wahab [ Di, 04 April 2006 10:20 ] [ ID #1260243 ]

Re: Idiomatisches

Mirco Wahab wrote:

> print split /[^a-z]/, do { local $/; (<DATA>) };
[...]
> Nun meine Frage dazu. Ist es üblich bzw.
> 'idiomatisch gebräuchlich', einen do{}-Block
> so direkt in eine Liste zu expandieren - oder
> sollte man das lassen?

Das ist völlig ok. Ein do-Block liefert, im Gegensatz
zu einem Block ohne do einen Wert und kann an allen Stellen
eingesetzt werden, wo ein Wert (hier: ein Array)
erwartet wird.

Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel
Frank Seitz [ Di, 04 April 2006 12:08 ] [ ID #1260244 ]

Re: Idiomatisches

Hallo Frank

>> print split /[^a-z]/, do { local $/; (<DATA>) };
>
> Das ist völlig ok. Ein do-Block liefert, im Gegensatz
> zu einem Block ohne do einen Wert und kann an allen Stellen
> eingesetzt werden, wo ein Wert (hier: ein Array)
> erwartet wird.

Danke für den Hinweis. Arbeitet hier in der NG
jemand mit Pe *und* Py?

Ich frage mich inzwischen ein wenig, warum
ich Py lernen sollte (-- wo doch alle so drauf
schwören - it's kewl ;-)

Irgendwie sehen die Perl-Lösungen für die
Py-Challenge schöner aus :-((

Rätsel 5 ist so ein Ding. Ein Python-Data-Dump
von einem 3D-Array mit Zeichen und korrespon-
dierenden Wiederholungen.
(http://www.pythonchallenge.com/pc/def/banner.p)

#!/usr/bin/perl -w
use Inline::Python;

my $B = py_depickle('banner.f');
print "\n", map { $$_[0] x $$_[1] } [at] $_ for ( [at] $B);

use Inline Python => <<'PYTHON';
import pickle
def py_depickle(f):
return pickle.Unpickler(open('banner.p')).load()
PYTHON

Der gesamte Perl-Code ist sogar
kürzer als das reine Laden der
Datenstruktur in Python.

Nun ja, belassen wirs dabei mit dem Flamewar ;-)

Viele Grüße & Dank

M.
Mirco Wahab [ Di, 04 April 2006 13:57 ] [ ID #1260245 ]

Re: Idiomatisches

Mirco Wahab wrote:

> Ich frage mich inzwischen ein wenig, warum
> ich Py lernen sollte (-- wo doch alle so drauf
> schwören - it's kewl ;-)

Der Hype ist vorbei und hat mich nicht mal
periphaer tangiert.

Wenn Du was wirklich neues lernen willst, haette
ich Ruby bzw. Ruby-on-Rails zu bieten. Hat mich
echt vom Hocker gehauen.
Und is at present so kewl, man!

> Irgendwie sehen die Perl-Lösungen für die
> Py-Challenge schöner aus :-((

Perl ist halt post-modern.

T.
Tony Muler [ Di, 04 April 2006 19:11 ] [ ID #1261850 ]
Perl » de.comp.lang.perl.misc » Idiomatisches

Vorheriges Thema: SSL und Perl
Nächstes Thema: require, absoluter Pfadname