Re: Link in nieuw venster openen
Daniel Tryba wrote:
> robert <{n.i.w.s}@allyourbass.org.invalid> wrote:
>>> Ik zeg alleen maar dat er in andere talen in vele gevallen een
>>> simpelere (en snellere) oplossing is dan het gebruik van regexps.
>>
>> Nee, je zei specifiek dat het ook in Perl zonde is om RE's te
>> gebruiken :)
>
> Tsja, maar dat is het ook indien het onnodig gebeurd, immers volgens
> je eigen benchmark is de RE trager dan de string replace variant :)
annemende dat je doelt op:
======
Dat is pas merkbaar als je honderdduizenden toevoegingen gaat doen (op
mijn
machine haal ik 170000 regex-'inserts' per seconde), en de code om het
met
regular expressions te doen is IMO leesbaarder:
$str =~ s/href=/target=_blank href=/;
vs
substr($str, index($str, "href="), 0) = "target=_blank ";
======
Die vegelijking is mogelijk niet helemaal eerlijk, een betere
vergelijking lijkt mij:
$str =~ s/(href=)/target=_blank \1/;
vs
substr($str, index($str, "href="), 0) = "target=_blank ";
Hoewel ik niet weet of het ook sneller is. Bovendien zijn zulke kleine
verschillen zo onbeduidend, dat als ze voor je project uitmaken dat je
wellicht beter in C of assembly kan gaan programmeren...
Mark
Re: Link in nieuw venster openen
Daniel Tryba <news_nl.internet.www.server-side@canopus.nl>:
> robert <{n.i.w.s}@allyourbass.org.invalid> wrote:
>> > Ik zeg alleen maar dat er in andere talen in vele gevallen een
>> > simpelere (en snellere) oplossing is dan het gebruik van regexps.
>>
>> Nee, je zei specifiek dat het ook in Perl zonde is om RE's te gebruiken
>> :)
>
> Tsja, maar dat is het ook indien het onnodig gebeurd, immers volgens je
> eigen benchmark is de RE trager dan de string replace variant :)
Definieer 'onnodig'. Als ik twee keer een RE gebruik, in plaats van een
string replace, in m'n hele programma dat merk jij het verschil echt niet
(je praat over microseconden).
Maar als jij kennelijk het onderste uit de kan wilt halen, waarom gebruik
je dan uberhaupt PHP?
>> > _Als_ je uberhaupt al weet wat een RE is. een ~= operator gevolgt
>> > door s/foo/bar/g is voor de leek vaag.
>>
>> Dat is een drogreden. In Perl is '=~' een veelgebruikte operator; als
>> iemand ('de leek') zich waagt aan de taal, dan ga ik ervan uit dat
>> deze persoon zich eerst verwittigt van de syntax van de taal. Anders
>> kan je over elke taal wel moeilijk gaan doen (zoals een bepaalde '==='
>> operator die uitblinkt in duidelijkheid ;).
>
>=== is in 1 regel uit te legen (verglijking inclusief type), waar regexps
>toch al heel wat regeltjes worden.
Het kennisniveau van iemand die de operators van een taal niet kan lezen is
over het algemeen anders dan het niveau van iemand die (complexe) RE's niet
begrijpt; jij haalt ze door elkaar.
Ik kan in 1 regel uitleggen wat de =~ operator doet (zoeken/substitueren
in, of transleren van, een scalar variabele). Heeft vooralsnog geen
helemaal niks met RE's van doen.
--
robert
Re: Link in nieuw venster openen
Marcus <doei@bannerswapnl.com>:
> Die vegelijking is mogelijk niet helemaal eerlijk, een betere
> vergelijking lijkt mij:
>
> $str =~ s/(href=)/target=_blank \1/;
Dan liever:
$str =~ s/href=/target=_blank $&/;
Maar alhoewel het functioneel gezien misschien meer in de buurt komt van de
methode hieronder, vind ik 'em niet beter. Omdat de replace plaatsvindt op
een statische string mag je wat mij betreft die string ook gewoon aan de
RHS gebruiken.
Case-sensitivity telt niet mee, want daar wordt hieronder ook niet op gelet
(anders moet de index() een lc() bevatten, en dan is het nog maar de vraag
of 'ie sneller is).
> substr($str, index($str, "href="), 0) = "target=_blank ";
>
> Hoewel ik niet weet of het ook sneller is.
Dat is 'ie niet; backreferences zijn vaak wat duurder.
--
robert
Re: Link in nieuw venster openen
robert <{n.i.w.s}@allyourbass.org.invalid> wrote:
> > Tsja, maar dat is het ook indien het onnodig gebeurd, immers volgens je
> > eigen benchmark is de RE trager dan de string replace variant :)
>
> Definieer 'onnodig'. Als ik twee keer een RE gebruik, in plaats van een
> string replace, in m'n hele programma dat merk jij het verschil echt niet
> (je praat over microseconden).
Tsja, maar waarom moet ik opeens denken aan die geweldig MS reclame voor
hun nieuwe OS?
> Maar als jij kennelijk het onderste uit de kan wilt halen, waarom gebruik
> je dan uberhaupt PHP?
Waarom denk je dat _ik_ PHP gebruik? De enige plekken waar ik PHP
gebruik zijn of legacy apps waarvoor ik nog geen behoefte heb gehad om
deze te vervangen, of een project waar al voor PHP gekozen was voor dat
ik uberhaupt bij het project betrokken was.
> >=== is in 1 regel uit te legen (verglijking inclusief type), waar regexps
> >toch al heel wat regeltjes worden.
>
> Het kennisniveau van iemand die de operators van een taal niet kan lezen is
> over het algemeen anders dan het niveau van iemand die (complexe) RE's niet
> begrijpt; jij haalt ze door elkaar.
Ik kan dan concluderen dat ik geen idee heb wat =~ doet.
> Ik kan in 1 regel uitleggen wat de =~ operator doet (zoeken/substitueren
> in, of transleren van, een scalar variabele). Heeft vooralsnog geen
> helemaal niks met RE's van doen.
Nu heb ik nog altijd geen idee wat =~ doet.
--
Daniel Tryba
Re: Link in nieuw venster openen
Marcus <doei@bannerswapnl.com> wrote:
> $str =~ s/href=/target=_blank href=/;
> vs
> substr($str, index($str, "href="), 0) = "target=_blank ";
> ======
>
> Die vegelijking is mogelijk niet helemaal eerlijk, een betere
> vergelijking lijkt mij:
>
> $str =~ s/(href=)/target=_blank \1/;
Waarom is dit een betere verglijking?
> vs
> substr($str, index($str, "href="), 0) = "target=_blank ";
Weer een geweldig voorbeeld van perl. substr doet meer dan je denkt :)
> Hoewel ik niet weet of het ook sneller is.
Een backreference maakt een regexp sneller?
> Bovendien zijn zulke kleine verschillen zo onbeduidend, dat als ze
> voor je project uitmaken dat je wellicht beter in C of assembly kan
> gaan programmeren...
Beide zijn niet portable en de winst die je haalt in snelheid moet je
zien op te wegen tegen een langere ontwikkeltijd en extra debugtijd.
--
Daniel Tryba
Re: Link in nieuw venster openen
Daniel Tryba <news_nl.internet.www.server-side@canopus.nl>:
> robert <{n.i.w.s}@allyourbass.org.invalid> wrote:
>> Maar als jij kennelijk het onderste uit de kan wilt halen, waarom
>> gebruik je dan uberhaupt PHP?
>
> Waarom denk je dat _ik_ PHP gebruik? De enige plekken waar ik PHP
> gebruik zijn of legacy apps waarvoor ik nog geen behoefte heb gehad om
> deze te vervangen, of een project waar al voor PHP gekozen was voor dat
> ik uberhaupt bij het project betrokken was.
Anders had je natuurlijk veel liever gekozen voor Perl...
>> Ik kan in 1 regel uitleggen wat de =~ operator doet
>> (zoeken/substitueren in, of transleren van, een scalar
>> variabele). Heeft vooralsnog geen helemaal niks met RE's van doen.
>
> Nu heb ik nog altijd geen idee wat =~ doet.
....alhoewel, misschien is het een beetje te hoog gegrepen ;)
--
robert
Re: Link in nieuw venster openen
Daniel Tryba <news_nl.internet.www.server-side@canopus.nl>:
> Marcus <doei@bannerswapnl.com> wrote:
>> Die vegelijking is mogelijk niet helemaal eerlijk, een betere
>> vergelijking lijkt mij:
>> $str =~ s/(href=)/target=_blank \1/;
> Waarom is dit een betere verglijking?
Omdat het functioneel gezien beter bij de substr()-methode past. Wat nóg
beter past is:
$str =~ m/href=/g;
substr($str, pos $str, 0) = "target=_blank ";
Maar dat is wat mij betreft niet een erg mooie methode.
--
robert
Re: Link in nieuw venster openen
robert <{n.i.w.s}@allyourbass.org.invalid>:
> Omdat het functioneel gezien beter bij de substr()-methode past. Wat nóg
> beter past is:
>
> $str =~ m/href=/g;
> substr($str, pos $str, 0) = "target=_blank ";
>
> Maar dat is wat mij betreft niet een erg mooie methode.
Nah, final offer:
$str =~ s/(?=href=)/target=_blank /;
--
robert
Re: Link in nieuw venster openen
robert <{n.i.w.s}@allyourbass.org.invalid> wrote:
> >> Maar als jij kennelijk het onderste uit de kan wilt halen, waarom
> >> gebruik je dan uberhaupt PHP?
> >
> > Waarom denk je dat _ik_ PHP gebruik? De enige plekken waar ik PHP
> > gebruik zijn of legacy apps waarvoor ik nog geen behoefte heb gehad om
> > deze te vervangen, of een project waar al voor PHP gekozen was voor dat
> > ik uberhaupt bij het project betrokken was.
>
> Anders had je natuurlijk veel liever gekozen voor Perl...
Met een aan zekerheid grenzende waarschijnlijkheid kan ik daar
ontkennenend op antwoorden.
> >> Ik kan in 1 regel uitleggen wat de =~ operator doet
> >> (zoeken/substitueren in, of transleren van, een scalar
> >> variabele). Heeft vooralsnog geen helemaal niks met RE's van doen.
> >
> > Nu heb ik nog altijd geen idee wat =~ doet.
>
> ...alhoewel, misschien is het een beetje te hoog gegrepen ;)
Tsja, 1 operator die op z'n minst 3 verschillende functies kan hebben
(dat wordt wel een heel lange 1 regelige uitleg), substr wat naast het
retouneren van een substr ook substitutesubstr kan betekenen. Sommige
zullen dat als kracht bestempelen, maar ik zie het zelf als
onduidelijk.
--
Daniel Tryba
Re: Link in nieuw venster openen
NNTP-Posting-Host: cust.91.90.adsl.cistron.nl
X-Trace: ncc1701.cistron.net 1054535043 24222 195.64.91.90 (2 Jun 2003 06:24:03 GMT)
X-Complaints-To: abuse@cistron.nl
NNTP-Posting-Date: Mon, 2 Jun 2003 06:24:03 +0000 (UTC)
User-Agent: slrn/0.9.7.4 (Darwin)
Xref: nl-news.euro.net nl.internet.www.server-side:29735
Daniel Tryba <news_nl.internet.www.server-side@canopus.nl>:
> robert <{n.i.w.s}@allyourbass.org.invalid> wrote:
> [Perl]
> Tsja, 1 operator die op z'n minst 3 verschillende functies kan hebben
> (dat wordt wel een heel lange 1 regelige uitleg), substr wat naast het
> retouneren van een substr ook substitutesubstr kan betekenen. Sommige
> zullen dat als kracht bestempelen, maar ik zie het zelf als onduidelijk.
Ik meer als 'logisch'. Overigens heb ik nog een variant gevonden:
substr($str, index($str, "href="), 0, "target=_blank ");
Perl rules ;)
--
robert