とりあえずテストファイルとして、下の様にして標準出力1列目にxの値、2列目にexp(x)の値を出力してみるんだな。
D:\>perl -le "sub f(){return exp($_);} for(1..20){$f=&f($_); print \"$_ $f\";}" 1 2.71828182845905 2 7.38905609893065 3 20.0855369231877 4 54.5981500331442 5 148.413159102577 6 403.428793492735 7 1096.63315842846 8 2980.95798704173 9 8103.08392757538 10 22026.4657948067 11 59874.1417151978 12 162754.791419004 13 442413.39200892 14 1202604.28416478 15 3269017.37247211 16 8886110.52050787 17 24154952.7535753 18 65659969.1373305 19 178482300.963187 20 485165195.40979 D:\>
実行結果が確認できたからこれをパイプ処理でa.datに書き込むんだな。ここまででデータファイルができたんだな。
D:\>perl -le "sub f(){return exp($_);} for(1..20){$f=&f($_); print \"$_ $f\";}">a.dat D:\>
次はこれを加工することを考えるんだな。-aオプションを使ってオートスプリットモードとし、各列の内容を特殊配列@Fに読み込むんで、これを加工するんだな。ここでは、入力ファイルa.datの1列目の逆数を取り、2列目の自然対数を取ったんだな。
D:\>perl -alne "$F[0]=1/$F[0]; $F[1]=log($F[1]); print \"$F[0] $F[1] \"" a.dat 1 1 0.5 2 0.333333333333333 3 0.25 4 0.2 5 0.166666666666667 6 0.142857142857143 7 0.125 8 0.111111111111111 9 0.1 10 0.0909090909090909 11 0.0833333333333333 12 0.0769230769230769 13 0.0714285714285714 14 0.0666666666666667 15 0.0625 16 0.0588235294117647 17 0.0555555555555556 18 0.0526315789473684 19 0.05 20 D:\>
少し見づらいけど、1行目には1/$x、2行目にはlog(exp($x))=$xが表示されていることがわかるんだな。