zoukankan      html  css  js  c++  java
  • 关于print函数的一些细节问题探讨

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

    my $var='hello,world';
    print "$var\n";

    二、

    my $var='hello,world';
    print $var , "\n";

    三、

    my $var='hello,world';
    print $var . "\n";

    想问一下这三种方式有什么区别吗?比如在效率和内部处理方面?

    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" 同上


  • 相关阅读:
    iSCSI又称为IPSAN
    文档类型定义DTD
    HDU 2971 Tower
    HDU 1588 Gauss Fibonacci
    URAL 1005 Stone Pile
    URAL 1003 Parity
    URAL 1002 Phone Numbers
    URAL 1007 Code Words
    HDU 3306 Another kind of Fibonacci
    FZU 1683 纪念SlingShot
  • 原文地址:https://www.cnblogs.com/fpga/p/1628486.html
Copyright © 2011-2022 走看看