Perl script making a pattern in variables -
#! /usr/bin/perl use strict; use warnings; #always use these! open (myfile, '>script2.txt'); $world = 1; $top (1 .. 100) { $left (1 .. 100) { print myfile "\#world$world \{ background: url(/images/1.png) 0 0 no-repeat; float: left; width: 1%; height: 2%; position: absolute; top: $top\%; left: $left\%; z-index: -1; margin-top: -10px; margin-left: -10px; \} \#world$world:hover \{ background-position: 0 -20px; cursor: pointer; \}"; $world++; } } close (myfile); currently perl script generates 10000 results (100 top x 100 left) how can modify $top produces 0, 2.5, 5...100 instead of 0, 1, 2, ...100 , $left produces 0, 1.25, 2.5, ... 100 instead of 0, 1, 2, ... 100
thanks
perl's foreach loop useful in many cases, when need advanced control on increment, c-style loop right tool:
for (my $top = 0; $top <= 100; $top += 2.5) {...} $left should easy enough figure out.
the perlsyn manual page contains more information different styles of loops, , keywords related control.
finally, modern code tends use 3 argument form of open along lexical file handle. change open line to:
open $file, '>', 'script2.txt' or die $!; and replace myfile $file in rest of code. there variety of reasons this, include error checking, preventing file handle clobbering, automatic closing... search here on should provide details.
as ysth points out, avoid compound errors floats, can write way:
my $low = 0; $high = 100; $step = 2.5; $reps = int (($high - $low) / $step); $i (0 .. $reps) { $top = $i * $step; ... } you wrap in function:
sub range { ($low, $high, $step) = @_; map {$low + $_ * $step} 0 .. int (($high - $low) / $step) } and easy as:
for $top (range 0 => 100, +2.5) {...}
Comments
Post a Comment