[求助]关于print函数的一些细节问题探讨

[求助]关于print函数的一些细节问题探讨

在论坛看了一些别人的代码,经常会用到print函数来打印指定的字符串,有一些需要在末尾打印换行符,但是我看到了三个不同的版本:
一、

[Copy to clipboard] [ - ]
CODE:
my $var='hello,world';
print "$var\n";

二、

[Copy to clipboard] [ - ]
CODE:
my $var='hello,world';
print $var , "\n";

三、

[Copy to clipboard] [ - ]
CODE:
my $var='hello,world';
print $var . "\n";

想问一下这三种方式有什么区别吗?比如在效率和内部处理方面?
个人感觉"$var\n"和$var . "\n"是一样的, 不知道$var特别大的时候会不会降低效率.

我测试下, 占个蹲位先.



To Be Continued...
第二种效率最快

第一种最慢
use strict;
use warnings;
use File::Spec;
use Benchmark;

my $str = 'Hello, World' x 1000000;
open(NULL, ">", File::Spec->devnull);
timethese(100, {
    'print $str, "\n"'  => sub { print NULL $str, "\n"},
    'print "$str\n"'    => sub { print NULL "$str\n"},
    'print $str . "\n"' => sub { print NULL $str . "\n"},
});

# Windows上跑的, 结果如下:
# Benchmark: timing 100 iterations of print "$str\n", print $str . "\n", print $str, "\n"...
# print "$str\n": 14 wallclock secs (12.46 usr +  0.18 sys = 12.64 CPU) @  7.91/s (n=100)
# print $str . "\n": 15 wallclock secs (12.60 usr +  0.18 sys = 12.78 CPU) @  7.83/s (n=100)
# print $str, "\n": 11 wallclock secs (10.45 usr +  0.12 sys = 10.57 CPU) @  9.47/s (n=100)
# 比较明显的是print $str, "\n"最快, 而其余2种方法不相上下(多次测试中这2种各有快慢, 可忽略差异).
简单分析下:
print $var, "\n" 直接输出
print "$var\n" 内部生成新变量, 再输出
print $var . "\n" 同上
嗯,多谢Lonki的测试~~明白了,以后直接用print $var,"\n"这样的形式了,呵呵~
厉害。能不能说下Benchmark的用法。
CPAN没有找到。郁闷
这句话表示什么意思的?谢谢
open(NULL, ">", File::Spec->devnull);
To liang573728 :

Benchmark: 在CPAN搜索时下拉选modules.

open(NULL, ">", File::Spec->devnull); # 相当于Linux下的/dev/null