如何在不描述每个元素的格式的情况下打印数组?

use*_*116 6 arrays perl printf

我想打印几个数组,输出元素的字段宽度为3,我想我可以使用printf,但如果我使用printf那么我需要编写数组的所有元素的格式,但数组很大.

例如

@array = (1,10,100,30);
printf ("%3d %3d %3d %3d\n",$array[0],$array[1],$array[2],$array[3]);
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用循环打印元素,直到所有数组循环,但我认为这不是一个好主意.

有没有办法可以让我只描述一次元素的格式,然后自动应用于整个数组?

这样的事情?

printf ("%3d\n",@array);
Run Code Online (Sandbox Code Playgroud)

谢谢

mob*_*mob 11

这有两种方法:

  1. 使用循环

    printf "%3d ", $_  for @array;
    print "\n";
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用x运算符构建可变长度模板

    printf "%3d " x @array . "\n", @array;
    
    Run Code Online (Sandbox Code Playgroud)


Cos*_*314 6

试试这个混合物:

print( map( {sprintf("%3d\n", $_)}, @array));
Run Code Online (Sandbox Code Playgroud)

  • \*`print join("",map {sprintf"%3d",$ _} @array),"\n"` (4认同)