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! :)
- 1879 megtekintés
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]
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
"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
- A hozzászóláshoz be kell jelentkezni
szedd ki a commenteket ;)
- A hozzászóláshoz be kell jelentkezni
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 hozzászóláshoz be kell jelentkezni
nem teljesen.
ez csak a kisbetűs kiterjesztésüeket veszi be.
mondjuk lehet, hogy nem lenne olyan nagy módosítás.
az $1 és a $2 honnan nyernek értéket? vagy csak én nem tudok valami nagyon alapvetőt perlül? (valszeg:)
- A hozzászóláshoz be kell jelentkezni
Innen: (^.+)=$1 ($ext)=$2
- A hozzászóláshoz be kell jelentkezni
akkor a regexpelés még nem 100%-ig tiszta nekem.
köszi! :)
nagyon bírom a perl-t :)
- A hozzászóláshoz be kell jelentkezni
na meg is van
while (<*>){push @file,$_ if -f && /(^.+)(.jpg|.jpeg|.png|.gif)$/i && -f "thumb/".$1."_t".$2}
ez durva. sejtettem, hgoy egy sorban is meg lehet oldani :)
- A hozzászóláshoz be kell jelentkezni
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")}
- A hozzászóláshoz be kell jelentkezni
a pontot leszámítva a jpe?g-et én is beleraktam. csak ami ott volt, abba még nem raktam bele.
de thx! :)
- A hozzászóláshoz be kell jelentkezni
Egyébként lehet még durvábbra, csak ezt már túlzásnak tartottam:
while (<*>) {push @file,$& if (-f && s/^(.+)\.(jpe?g|png|gif)$/thumb\/$1_t.$2/i && -f)}
- A hozzászóláshoz be kell jelentkezni
"Perl - A progamozási nyelv, ahol a forráskód olvashatóságán a gzip-tömörítés sem ront semmit :)"
- A hozzászóláshoz be kell jelentkezni
Másképp ismerem: a kód ugyanúgy néz ki RSA titkosítás előtt és után.
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni