Если вы используете этот формат, то вы можете просто использовать:
print OUTFILE "$rtype|$rdescr|$rid\n";
Вам следует подумать о переходе на лексические дескрипторы файлов , хотя в ISTR для форматов требуются нелексические дескрипторы .Однако это не приводит к автоматическому усечению полей до длины, которая может иметь для вас значение.
Этот код работает для меня:
#!/usr/bin/env perl
use strict;
use warnings;
open OUTFILE, ">", "file.out" or die "A horrible death";
my $rtype = "ABCDEFG HIJKLMN OPQRST";
my $rdescr = "Abc def ghi jkl mno pqr stuv wxyz?";
my $rid = "0123456789";
format details =
@<<<<<<<<<<<< | @<<<<<<<<<<<<<<<<<<<<<<< | @<<<<<<<<<<<< |
"$rtype", "$rdescr", "$rid"
.
OUTFILE->format_name("details");
write OUTFILE;
$rtype = "ABCDEFG";
$rdescr = "Abc def";
$rid = "01234";
write OUTFILE;
Вывод, который он выдает (в file.out
)is:
ABCDEFG HIJKL | Abc def ghi jkl mno pqr | 0123456789 |
ABCDEFG | Abc def | 01234 |
(PS: сначала я попытался \|
; в выводе он выдал \|
, поэтому было легко и разумно сделать вывод, что обратный слеш на самом деле не нужен).
С лексическим дескриптором файла:
#!/usr/bin/env perl
use strict;
use warnings;
open my $out, ">", "file.out" or die "A horrible death";
my $rtype = "ABCDEFG HIJKLMN OPQRST";
my $rdescr = "Abc def ghi jkl mno pqr stuv wxyz?";
my $rid = "0123456789";
format details =
@<<<<<<<<<<<< | @<<<<<<<<<<<<<<<<<<<<<<< | @<<<<<<<<<<<< |
"$rtype", "$rdescr", "$rid"
.
$out->format_name("details");
write $out;
$rtype = "ABCDEFG";
$rdescr = "Abc def";
$rid = "01234";
write $out;
Это дает тот же вывод.