打印到终端时,Perl如何在颜色之间切换?

时间:2014-03-11 16:19:56

标签: perl colors terminal

为什么以下脚本不起作用?

use strict;
use warnings;

use Term::ANSIColor ':constants';
my @colors = ( BLUE, GREEN );
my $select;

my @data = 1 .. 10;
print { $colors[$select++ % @colors] } $_, "\n" for @data;

输出:

  

Can't use string ("") as a symbol ref while "strict refs" in use at - line 9.

2 个答案:

答案 0 :(得分:4)

您使用的是print { $fh } @strings语法(documented here)。花括号中的东西(在简单情况下实际上是可选的)被解释为文件句柄。在这里,您传递一个字符串而不是文件句柄对象,因此Perl会查找一个带有字符串名称的全局变量。不幸的是,这个字符串包含时髦的命令序列(恰好是不可打印的)而不是一些可用的变量名。

解决方案:不要使用这种奇怪的语法,只需执行

my $select = 0;
print $colors[$select++ % @colors], $_, "\n" for 1 .. 10;

答案 1 :(得分:0)

这似乎可以做你想要的:

print @{[ $colors[$select++ % @colors] ]}, $_, "\n" for @data

我会猜测一个解释:@{[ ]}插值函数的值。我以前在HEREDOC中使用过它们。