显示标签为“perl”的博文。显示所有博文
显示标签为“perl”的博文。显示所有博文

2012年7月29日星期日

Perl经验谈之二------不缓存buffer直接输出

Perl中的print是和C语言中一样,当需要输出的数据量不能达到其内部设定的buffer的大小时候是不会输出到标准输出的。因此需要显示的去设定,当需要实时的输出数据的时候,让perl刷新缓存,将缓存中内容在下一个print之前输出到标准输出。


设定方法:在需要直接输出的代码之前加上如下的指令:
$| = 1;
当不需要这个特性之后,尽量将其关闭,提高程序的性能,毕竟每次都直接输出,是需要耗费一定的系统资源的。关闭的方法只需要将"$|"的值设置为0就可以了。

示例代码如下:

#!/usr/bin/perl

#将$|设置为1,代码不经过缓存,直接输出,会看到每sleep1秒,=输出一次
$| = 1;
for($i=0;$i<10;$i++){
print "=";
sleep 1;
}
print "\n";

#打开缓存开关,10s后一次性输出所有=
$| = 0;
for($i=0;$i<10;$i++){
print "=";
sleep 1;
}

参考:http://desk.stinkpot.org:8080/tricks/index.php/2006/02/flush-perls-print-buffer/

Perl经验谈之一------Cpan配置文件

今天使用时候提示Cpan配置文件丢失,要做初始化,但是我这边是只有配置了代理才能使用外网了,所以执行了几次都是不可以的,以前忘了怎么初始化的了,直接进去之后使用命令行设置代理就正常了,但是今天是进去都没有办法
http_proxy         http://127.0.0.1:8080
相当Linux下大部分都是有固定的配置文件的,于是直接找cpan的配置文件,Cpan的配置文件位于 ~/.cpan/CPAN/MyConfig.pm
文件格式类似于下面,实际选项根据系统不同可能有所差异

只要仿照下面将你要配置的选项配置进去,保存即可
下面是我的配置文件,粘贴如下


$CPAN::Config = {
  'applypatch' => q[],
  'auto_commit' => q[0],
  'build_cache' => q[100],
  'build_dir' => q[/usr/local/app/.cpan/build],
  'build_dir_reuse' => q[0],
  'build_requires_install_policy' => q[yes],
  'bzip2' => q[/usr/bin/bzip2],
  'cache_metadata' => q[1],
  'check_sigs' => q[0],
  'colorize_output' => q[0],
  'commandnumber_in_prompt' => q[1],
  'connect_to_internet_ok' => q[1],
  'cpan_home' => q[/usr/local/app/.cpan],
  'ftp_passive' => q[1],
  'ftp_proxy' => q[],
  'getcwd' => q[cwd],
  'gpg' => q[],
  'gzip' => q[/usr/bin/gzip],
  'halt_on_failure' => q[0],
  'histfile' => q[/usr/local/app/.cpan/histfile],
  'histsize' => q[100],
  'http_proxy' => q[http://127.0.0.1:8080],
  'inactivity_timeout' => q[0],
  'index_expire' => q[1],
  'inhibit_startup_message' => q[0],
  'keep_source_where' => q[/usr/local/app/.cpan/sources],
  'load_module_verbosity' => q[none],
  'make' => q[/usr/bin/make],
  'make_arg' => q[],
  'make_install_arg' => q[],
  'make_install_make_command' => q[/usr/bin/make],
  'makepl_arg' => q[],
  'mbuild_arg' => q[],
  'mbuild_install_arg' => q[],
  'mbuild_install_build_command' => q[./Build],
  'mbuildpl_arg' => q[],
  'no_proxy' => q[],
  'pager' => q[/usr/bin/less],
  'patch' => q[],
  'perl5lib_verbosity' => q[none],
  'prefer_external_tar' => q[1],
  'prefer_installer' => q[MB],
  'prefs_dir' => q[/usr/local/app/.cpan/prefs],
  'prerequisites_policy' => q[follow],
  'proxy_user' => q[],
  'scan_cache' => q[atstart],
  'shell' => q[/bin/bash],
  'show_unparsable_versions' => q[0],
  'show_upload_date' => q[0],
  'show_zero_versions' => q[0],
  'tar' => q[/usr/bin/tar],
  'tar_verbosity' => q[none],
  'term_is_latin' => q[1],
  'term_ornaments' => q[1],
  'test_report' => q[0],
  'trust_test_report_history' => q[0],
  'unzip' => q[/usr/bin/unzip],
  'urllist' => [],
  'use_sqlite' => q[0],
  'version_timeout' => q[15],
  'wget' => q[/usr/bin/wget],
  'yaml_load_code' => q[0],
  'yaml_module' => q[YAML],
};
1;
__END__