röviden :) (Perl)

nakiálltam kódolgatni.
tud valaki valami módot arra, hogy ezt még rövidebben írjam meg perl-ben?

#!/usr/bin/perl

#megkeresi a helyesen letarolt kepeket.
#a kepekhez kell tartoznia egy kicsinyitett kepnek is
#ami a thumb konyvtarban kell, hogy legyen es egy _t-t is kell tartalmaznia
#valamint ugyan olyan kiterjesztesunek kell lennie

while (<*>){
foreach $baa1 ((".jpg",".jpeg",".png",".gif")){
if(-f $_ && lc =~ /${baa1}$/ && ($last = rindex(lc,$baa1)) != -1 && -f ".\/thumb\/".substr($_,0,$last)."_t".substr($_,$last)){
push(@fajl,$_);
last;
}
}
}

#csak kiiratas
foreach $ki (@fajl){
print $ki,"\n";
}

(a fórum megtöri az if-et)
igazában a while-ban levő részre gondolok leginkább.
thx! :)

Hozzászólások

[offtopic]
tudom hogy nem ez volt a kérdés, de:
szerintem komolyabb helyen rettenetesen ellenjavalt, amit csinálsz.
nem arra kell törekedni, hogy senki más által meg nem érthető spagetti kódot írj, ami 2 byte-tal kevesebbet foglal, hanem arra hogy áttekinthető, hibakereshető, karbantarthatót.

Javaslat: írd meg sokkal hosszabban és világosabban.
[/offtopic]

naja. hát ez szerintem alapvetően hibakereshetőbb.
egyetemen nem voltam hajlandó c++-ban progozni, csak c-ben.
szóval szeretem én a durván szabványosságot. de perl-ben azért szerintem fontos, hogy rengeteg esetben durván lehet dolgokat lerövidíteni. igazából szerintem ha egy kódre ránéz az ember és sok ilyen összeszedett kis blokkból áll és nem egy 500 oldalas vacak, akkor könyebben rájön a hibára.

szóval jobban szeretem a rövid kódokat, mint a hosszú átláthatatlan dolgokat.
pl, mikor már egy if nek az else ágát sem találom meg, mert 6 oldalon keresztül 500 else van és tudja a halál, hogy melyik hova tartozik. viszont egy ilyen lerövidített kódban, ami egybe tartozik, az együtt van...
mondjuk én sem úgy kezdem ilyenkor, hogy megírom ennyiben :)
elég sokat piszkoltam, mire kiizzadtam ezt a kódot.

mondjuk persze ezt programozója válogatja.
én spec a larry wall féle extrém kódingot jobban csípem, mint az egyetemen tanított tudós programozást.

"pl, mikor már egy if nek az else ágát sem találom meg, mert 6 oldalon keresztül 500 else van és tudja a halál, hogy melyik hova tartozik. viszont egy ilyen lerövidített kódban, ami egybe tartozik, az együtt van..."

Ilyen esetben talán jobb megoldás a belsejét kiemelni egy függvénybe, mint három órát törni a fejed, hogy rövidebb kódot írj. Főleg, hogy fél év múlva, amikor hozzá kell nyúlnod, ugyanúgy három órát kell törnöd a fejed, hogy rájöjj, mit is írtál.
Persze, ez csak egy vélemény.

KisKresz

Ez valamivel rövidebb és ha nem néztem el, akkor azt csinálja, mint a másik.
@ext = ("jpg","jpeg","png","gif");
$ext = '\.'.join '|\.', @ext;
while (<*>){push @file,$_ if -f && /(^.+)($ext)$/ && -f "thumb/".$1."_t".$2}

A pontok nincsenek escape-elve!
Ja, és a teljesítményen javít ha inkább kiemeled a zárójelből. Sőt, szintén elhanyagolható sebességnövekedés, ha a jpg|jpeg választást "optimalizálod" (bár az ilyenek már erősen a regex-engine-től függnek, de perl-ben tapasztalatom szerint gyorsabb):

while (<*>) {push @file,$_ if (-f && /^(.+)\.(jpe?g|png|gif)$/i && -f "thumb/$1_t.$2")}

"Perl - A progamozási nyelv, ahol a forráskód olvashatóságán a gzip-tömörítés sem ront semmit :)"

Egy egyszerű példa:
Meg tudod mondani, hogy mit csinál az alábbi perl program?

$b='$b=%c%s%c;printf$b,39,$b,39;';printf$b,39,$b,39;

Na ezért kell olvasható, inkább nagy programot írni, hogy egy hónap múlva is értsed, mit csináltál.

Ami elől menekülnek, az után szaladnak.

WOW, egy ertekatadast es egy printf-t ertelmezni... Nagy feladvany! Ha megoldom, majd doktoratust irok belole... Amugy ezt self-reproducing code-nak (maskepp quine) hivjak. Lasd pl. http://www.nyx.net/~gthompso/quine.htm

Ertem en mit akarsz te mondani, es igazad is van, csak a pelda egyaltalan nem idetalalo.