为什么以下脚本不起作用?
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.
答案 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中使用过它们。