Perl中的Say功能
我有一个下面的Perl代码Perl中的Say功能,perl,Perl,我有一个下面的Perl代码 $fs_headerrecord_cut_casettenumber_pad_len = 2; $fs_headerrecord_batch_casettenumber_start_pos = 21; $fs_headerrecord_batch_casettenumber_data_len = 2; $fs_header_record = 1; $pad_length = 0; my $dir = "."; opendir(DIR, $dir) or die "Ca
$fs_headerrecord_cut_casettenumber_pad_len = 2;
$fs_headerrecord_batch_casettenumber_start_pos = 21;
$fs_headerrecord_batch_casettenumber_data_len = 2;
$fs_header_record = 1;
$pad_length = 0;
my $dir = ".";
opendir(DIR, $dir) or die "Cannot open directory: $dir!\n";
my @files = readdir(DIR);
closedir(DIR);
open my $out, ">>output.txt" or die "Cannot open cutfile!\n";
foreach my $file (@files) {
#next unless (-M $file <= 1 && $file =~ /^fs.*\.DTA$/i) ;
if (-M $file <= 1 && $file =~ /^fs.*\.DTA$/i) {
#print log_date() ."$file\n";
print "$file\n";
open my $fs_in, "<$file" or die "Cannot open $file!\n";
while (<$fs_in>) {
$recordlength = substr($_,220,1);
if ($recordlength == $fs_header_record) {
say $out ' ' x $pad_length, 'H', substr($_,0,1), say $out ' ' x $fs_headerrecord_cut_casettenumber_pad_len, substr($_, $fs_headerrecord_batch_casettenumber_start_pos, $fs_headerrecord_batch_casettenumber_data_len);
预期产量
H 14
H 14
H 14
H 14
H 14
当我打印“H”时,它被打印在一个新的行中。谁能告诉我我的代码出了什么问题吗?您使用的是2个字符,因此您将打印2个换行符 参见:打印vs说: 另外,您正在打印一个额外的“1”,因为您正在打印第二个say的返回值作为第一个say的参数 尝试替换此:
say $out ' ' x $pad_length, 'H', substr($_,0,1), say $out ' ' x $fs_headerrecord_cut_casettenumber_pad_len, substr($_, $fs_headerrecord_batch_casettenumber_start_pos, $fs_headerrecord_batch_casettenumber_data_len);
为此:
print $out ' ' x $pad_length, 'H', substr($_,0,1);
say $out ' ' x $fs_headerrecord_cut_casettenumber_pad_len, substr($_, $fs_headerrecord_batch_casettenumber_start_pos, $fs_headerrecord_batch_casettenumber_data_len);
或将所有数据发送到同一say语句:
say $out
' ' x $pad_length, 'H',
substr($_,0,1),
$out ' ' x $fs_headerrecord_cut_casettenumber_pad_len,
substr($_, $fs_headerrecord_batch_casettenumber_start_pos, $fs_headerrecord_batch_casettenumber_data_len);
您正在使用2个字符,因此将打印2个换行符 参见:打印vs说: 另外,您正在打印一个额外的“1”,因为您正在打印第二个say的返回值作为第一个say的参数 尝试替换此:
say $out ' ' x $pad_length, 'H', substr($_,0,1), say $out ' ' x $fs_headerrecord_cut_casettenumber_pad_len, substr($_, $fs_headerrecord_batch_casettenumber_start_pos, $fs_headerrecord_batch_casettenumber_data_len);
为此:
print $out ' ' x $pad_length, 'H', substr($_,0,1);
say $out ' ' x $fs_headerrecord_cut_casettenumber_pad_len, substr($_, $fs_headerrecord_batch_casettenumber_start_pos, $fs_headerrecord_batch_casettenumber_data_len);
或将所有数据发送到同一say语句:
say $out
' ' x $pad_length, 'H',
substr($_,0,1),
$out ' ' x $fs_headerrecord_cut_casettenumber_pad_len,
substr($_, $fs_headerrecord_batch_casettenumber_start_pos, $fs_headerrecord_batch_casettenumber_data_len);
打印之间不要使用逗号(
说“嗨”,说“嗨”;
),而是将它们作为单独的语句编写,说“嗨”;说“好”代码>。打印的顺序是相反的,你也会得到额外的1
打印;比如说$out''x$pad_length,$write;说出$out''x$fs\U headerrecord\u cut\u casette number\u pad\u len,substr($\u,$fs\u headerrecord\u batch\u casette number\u start\u pos,$fs\u hea derrecord\u batch\u casette number\u data\u len);然后1没有被打印出来,但是“H”在另一行上,我想要像上面显示的预期输出一样忽略上面的注释。现在解决了这一问题。说“blah”
相当于打印“blah\n”
-换句话说,它在您所说的任何内容的末尾添加了一行新行。打印之间不要使用逗号(说“嗨”,说“嗨”
),而是将它们作为单独的语句编写,说“嗨”;说“好”代码>。打印的顺序是相反的,你也会得到额外的1
打印;比如说$out''x$pad_length,$write;说出$out''x$fs\U headerrecord\u cut\u casette number\u pad\u len,substr($\u,$fs\u headerrecord\u batch\u casette number\u start\u pos,$fs\u hea derrecord\u batch\u casette number\u data\u len);然后1没有被打印出来,但是“H”在另一行上,我想要像上面显示的预期输出一样忽略上面的注释。现在解决了这一问题。say“blah”
相当于print“blah\n”
——换句话说,它在您所说的任何内容的末尾添加了一行新行。