- 论坛徽章:
- 1
|
如何在tainted mode下,做到自动format调整??急
open(MYFILE,">;$file_in" ;
其他不變...
會出錯的原因是因為你沒有把hash裡面的數值正確的抓出來...
所以perl會告訴你試圖存取為initial的變量..
我debug過你的程序後...如下:
- !/usr/bin/perl -Tw
- use strict;
- my $file = "./aaa.dat";
- my $file1 = "./aaa1.dat";
- my %hash =();
- open(FF,"$file");
- while((<FF>;)){
- my $data=$_;
- next if $data=~/^\#/;
- chomp($data);
- $data=~m!\s*(\w+)\s*\|\s*(\d+)\s*\|\s*(\w+)\s*!;
- my $name = $1;
- my $age = $2;
- my $place = $3;
- ${hash{$name}}{"age"} = $age;
- ${hash{$name}}{"place"} = $place;
- }
- close(FF);
- &write_file($file1,\%hash);
- sub write_file {
- my $file_in = shift;;
- my $hash = shift;
- my %hash = %{$hash};
- my($name_in,$age_in,$place_in,$format,$key);
- my($name_length,$age_length,$place_length);
- open(FF,">;$file_in");
- for my $key (keys %hash){
- $name_in = $key;
- $age_in = ${$hash{$name_in}}{'age'};
- $place_in = ${$hash{$name_in}}{'place'};
- $name_length=length($name_in);
- $age_length=length($age_in);
- $place_length=length($place_in);
- $format = "format FF=\n"
- . '@' .'<' x $name_length . '|'
- . '@' . '<' x $age_length . '|'
- . '@' . '<' x $place_length . "\n"
- . '$name_in' . ","
- . '$age_in' . ","
- . '$place_in' . "\n"
- . ".\n";
- print "$format\n";
- eval($format);
- write(FF);
- }
- }
复制代码 |
|