in reply to Printing Random Image in HTML

Basically, the problem is simply that your random image selection and 'Location: ...' printing statements are inside the foreach loop.
Also, you want to push $image to @imgs, not assign it.
if(!open DAT, "ads.dat") { print "Error: cannot open data file!\n"; exit 1; } else { @imgdata=<DAT>; foreach $c (@imgdata) { ($id,$image,$url,$type)=split(/\|/,$c); if ($type=~/^(internal|partner)$/) { push (@imgs, $image); } } $img = $imgs[int(rand($#imgs+1))]; print "Location: $img\n\n"; }

Replies are listed 'Best First'.
(Ovid) RE2): Printing Random Image in HTML
by Ovid (Cardinal) on Sep 13, 2000 at 20:32 UTC
    kilinrax: nice code, but we can get rid of your foreach loop:
    open DAT, "ads.dat" or die "Error: cannot open data file: $!\n"; @imgdata=<DAT>; @imgs = grep { s/^[^|]+\|([^|]+)\|[^|]+\|(?:internal|partner)$/$1/ } @ +imgdata; $img = $imgs[int(rand($#imgs+1))]; print "Location: $img\n\n";

    Cheers,
    Ovid

    I noticed everyone else had better, shorter answers than mine, sniff, sniff, so I just HAD to do something. Here's the regex broken out, for those who have asked for it:

    s/^ # Beginning of string [^|]+ # Everything up to the next bar \| # The bar ( # Capture to $1 [^|]+ # Everything up to the next bar ) # End capture \| # The bar [^|]+ # Everything up to the next bar \| # The bar (?: # Non-capturing parens internal # the string "internal" | # or partner # the string "partner" )$ # End of string /$1/x # Substitute $1 for string
    Join the Perlmonks Setiathome Group or just go the the link and check out our stats.
RE: Re: Printing Random Image in HTML
by damian (Beadle) on Sep 14, 2000 at 06:20 UTC
    hi kilinrax, u'r suggestion is the most effective, thanks allot.... oh btw. the image does rotates fine, but how will i be able to save the correct URL ($url) for the correct image? i will be saving the correct url to the cookie. the script should be able to rotate the image with corresponding url. thanks again.