2011-07-22 28 views
2
#! /usr/bin/perl 
use strict; 
use warnings; #Always use these! 
open (MYFILE, '>script2.txt'); 
my $world = 1; 
for my $top (1 .. 100) { 
    for my $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); 

目前這個perl腳本生成10000項(100頂×100左右),但我怎麼可以修改它,這樣$頂部產生0,2.5,5 ... 100,而不是0,1,2,... 100和$左側產生0,1.25,2.5,...,而不是100 0,1,2,... 100Perl腳本製作變量的模式

由於

+0

可能的重複[Perl定義了一個變量模式遵循](http://stackoverflow.com/questions/6783837/perl-defining-a-pattern-for-a-variable-to-follow) –

+0

@Alex =>這兩個是相關的,但這顯然是一個不同的用例,它引發了一個不同的答案('map'爲細粒度迭代控制生成列表與C-style'for')。 –

回答

1

Perl的foreach環是在許多情況下很有用,但是當您需要對增量進行高級控制時,C風格循環是正確的工具:

for (my $top = 0; $top <= 100; $top += 2.5) {...} 

$left應該很容易弄清楚。

perlsyn手冊頁包含有關不同風格的循環以及與其控制相關的關鍵字的更多信息。

最後,現代代碼傾向於使用open的三個參數形式以及詞法文件句柄。您open行更改爲:

open my $file, '>', 'script2.txt' or die $!; 

然後用$file在代碼的其餘部分替代MYFILE。這有多種原因,其中包括錯誤檢查,防止文件句柄破壞,自動關閉......在SO上的搜索應提供詳細信息。


由於YSTH指出,爲了避免與花車任何化合物的錯誤,你可以寫這樣說:

my $low = 0; 
my $high = 100; 
my $step = 2.5; 

my $reps = int (($high - $low)/$step); 
for my $i (0 .. $reps) { 
    my $top = $i * $step; 
    ... 
} 

,你可以換行了一個功能:

sub range { 
    my ($low, $high, $step) = @_; 
    map {$low + $_ * $step} 0 .. int (($high - $low)/$step) 
} 

然後它很容易:

for my $top (range 0 => 100, +2.5) {...} 
+0

只有當你添加的是一個完全可表示的浮點數時,這纔有效;不要嘗試像'for(my $ top = 0; $ top <= 88; $ top + = 2.2){...} – ysth

相關問題