gpt4 book ai didi

perl - 一个页面上的两种 perl 格式

转载 作者:行者123 更新时间:2023-12-05 00:54:25 25 4
gpt4 key购买 nike

我继承了快速连续两次使用格式的 perl 代码。这是一个 MWE。

#!/usr/bin/perl

use FileHandle;
use strict;
use warnings;

sub table {
my ($name, $val);

format_name STDOUT "FMT1";
format_top_name STDOUT "FMT1_TOP";

($name, $val) = ("Item1", 42); write;
($name, $val) = ("Item2", 100); write;

format FMT1_TOP =
Name | Cost
-------------+-------
.

format FMT1 =
@>>>>>>>>>>> | @<<<<
$name, $val
.
}

print "Data 1\n"; table; print "\n";
print "Data 2\n"; table;

我看到的问题是 perl 显然认为两组数据都是同一个表的一部分,并且不打印新的表标题。所以我得到的输出是这样的:
Data 1
Name | Cost
-------------+-------
Item1 | 42
Item2 | 100

Data 2
Item1 | 42
Item2 | 100

我希望看到:
Data 1
Name | Cost
-------------+-------
Item1 | 42
Item2 | 100

Data 2
Name | Cost
-------------+-------
Item1 | 42
Item2 | 100

我敢肯定肯定有一些 close_format - 我在 table() 末尾缺少的类似功能,但格式是如此上个世纪以至于我忘记了我曾经对它们的了解,而且我可以在网上找到的所有示例每个程序只使用一种格式。我错过了什么?

请注意,在这个特定点上,用其他东西替换格式在这个项目中不是一个可行的选择。

最佳答案

_TOP是一种页眉。 Perl 解释器将它打印在文件句柄的顶部。

使用 $~告诉 Perl 解释器 FMT1_TOP是调用 write 时应该使用的打印格式.

#!/usr/bin/perl

use FileHandle;
use strict;
use warnings;

sub table {
my ($name, $val);

$~ = "FMT1_TOP";
write;
format_name STDOUT "FMT1";
format_top_name STDOUT "FMT1_TOP";
($name, $val) = ("Item1", 42); write;
($name, $val) = ("Item2", 100); write;

format FMT1_TOP =
Name | Cost
-------------+-------
.

format FMT1 =
@>>>>>>>>>>> | @<<<<
$name, $val
.
}

print "Data 1\n"; table; print "\n";
print "Data 2\n"; table;

关于perl - 一个页面上的两种 perl 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40041051/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com