关注perl
Jan 2

windows下安装dmake

How to install dmake
    1、Download and install ActivePerl
    2、Open Command Prompt
    3、Type ppm install dmake
   tips:如何运行ppm install dmake 异常,可以参考文章http://itlife365.com/blog/post/os-windowxp-dos-http_proxy.php 设置http_proxy代理进行联网下载

Tags: ,
Jan 2

perl通过环境变量解决路径中包含中文名的问题,通过环境变量修改ppm的默认路径即可

C:\>set ACTIVEPERL_PPM_HOME=C:\perl\temp
C:\>ppm install your-package-name  记得替换为对应的值

(参考http://community.activestate.com/forum-topic/ppm-does-not-work-after-install

Tags:
Jan 2

window xp dos下通过设置http_proxy 使用代理上网或者下载文件

由于公司内部本机不能上网,都是通过代理上网的,在配置perl 的ppm文件升级的时候经常报错误,
比如升级perl install dmake 下载dmake的ppm包的时候报
Downloading ActiveState Package Repository packlist...failed 500 Can't connect to ppm4.activestate.com:80 (Bad hostname)
ppm install failed: Can't find any package that provides dmake

这时可以通过设置环境变量http_proxy 来解决。
dos下查看是否有设置变量set http_proxy

The http_proxy Environment Variable 几种http_proxy的设置区别
如果我代理的IP是10.2.4.5 端口是808

Set the http_proxy variable with the hostname or IP address of the proxy server:

  http_proxy=http://proxy.example.org
  http_proxy=10.2.4.5:808
If the proxy server requires a user name and password, include them in the following form:

  http_proxy=http://username:password@proxy.example.org

If the proxy server uses a port other than 80, include the port number:

  http_proxy=http://username:password@proxy.example.org:8080

各平台操作系统设置http_proxy的方法 Setting http_proxy
Windows XP设置代理
    1、Open the Control Panel and click the System icon.登陆到控制面板并点击系统
    2、The System Properties dialog is displayed.系统属性对话框
    3、On the Advanced tab, click on Environment Variables.点击高级 tab 页面的环境变量
    4、The Environment Variables dialog is displayed.
    5、Click New in the System variables panel. 新建环境变量
    6、The New Sytem Variable dialog is displayed.
    7、Add http_proxy with the appropriate proxy information (see examples above).设置环境变量

Windows 200x设置代理
    1、Right click on My Computer.
    2、Click on Properties and select the Advanced tab.
    3、Click "Environment Variables".
    4、The "System Variables" dialog appears.
    5、Click New and add http_proxy, with the appropriate proxy information (see examples above).

Windows NT设置代理
    Right click on My Computer.
    Click on Properties, select the Environment tab.
    Add http_proxy with the appropriate proxy information (see examples above).

Windows 95/98/ME设置代理
    Open the C:\autoexec.bat file for editing (e.g. in Notepad).
    Add a "SET" line like the following (see examples above):
          SET http_proxy=http://username:password@hostname:port
    Restart your computer for the change to take effect.

Mac OS X设置代理
The http_proxy should be set in two places on OS X:
    Shell: Add a line like the following in .bash_profile (/Users/<name>/.bash_profile):
          http_proxy=http://username:password@hostname:port;  export http_proxy
    This setting applies to PPM when it is launched from or used at the command line.
    Desktop: Add an entry like the following in your environment.plist file (/Users/<name>/.MacOSX/environment.plist):
          <key>http_proxy</key>
          <string>http://username:password@hostname:port</string>
    This setting applies to PPM when it is launched by clicking the PPM icon.

Linux, Solaris or HP-UX设置代理
Set the http_proxy environment variable using the command specific to your shell (e.g. set or export). To make this change persistent, add the command to the appropriate profile file for the shell. For example, in bash, add a line like the following to your .bash_profile or .bashrc file:
    http_proxy=http://username:password@hostname:port;  export http_proxy

Jun 15

同样的perl脚本,在不同的服务器上居然不能运行,报错如下:
原来是环境变量导致的,
D:\perl>perl perlConnDemo.pl
Use of :unique is deprecated at F:\oracle\product\10.2.0\db_1\perl\5.8.3\lib/MSW
in32-x86-multi-thread/Config.pm line 39.
Use of :unique is deprecated at F:\oracle\product\10.2.0\db_1\perl\5.8.3\lib/MSW
in32-x86-multi-thread/Config.pm line 80.
Perl lib version (v5.8.3) doesn't match executable version (v5.16.1) at F:\oracl
e\product\10.2.0\db_1\perl\5.8.3\lib/MSWin32-x86-multi-thread/Config.pm line 32.
Compilation failed in require at F:\oracle\product\10.2.0\db_1\perl\5.8.3\lib/MS
Win32-x86-multi-thread/DynaLoader.pm line 25.
BEGIN failed--compilation a
borted at F:\oracle\product\10.2.0\db_1\perl\5.8.3\li
b/MSWin32-x86-multi-thread/DynaLoader.pm line 25.
Compilation failed in require at F:\oracle\product\10.2.0\db_1\perl\site\5.8.3\l
ib/MSWin32-x86-multi-thread/DBI.pm line 156.
BEGIN failed--compilation aborted at F:\oracle\product\10.2.0\db_1\perl\site\5.8
.3\lib/MSWin32-x86-multi-thread/DBI.pm line 156.
Compilation failed in require at perlConnDemo.pl line 4.
BEGIN failed--compilation aborted at perlConnDemo.pl line 4.

从上述信息很明显,应该是早前安装的Oracle与新装的Perl冲突了,而且冲突是因为Oracle在安装的时候往我们系统中添加了一个Perl5Lib的环境变量,而这个环境变量指向的则是Oracle安装目录下那个模块不全的Perl,从信息提示可以知道为Oracle Home/perl目录。
解决方法:
1、适合经常与Oracle打交道而偶尔玩下perl的一类朋友:
如果是这样的话,建议就不要对环境变量Perl5Lib动手了。在运行Perl命令之前,设置下当前命令行窗口的临时Perl5Lib变量就可以了。如笔者的Perl环境安装在D盘根目录下,则在运行cmd后,使用命令Set Perl5Lib="D:\Perl\bin\"改变下环境变量Perl5Lib的指向,该命令作用域为Session级的,即重开Cmd后还得再次设置。
2、适合经常与Perl打交道而偶尔玩下Oracle的一类朋友:
可以先备份下环境变量Per5lLib的内容,然后将Perl5Lib清空或者设置为D:\Perl\Lib即OK。
3、两者都经常打交道的:
            将D:\Perl\lib加到环境变量Perl5Lib的最前面,注意,不是替换


小记一下

Dec 25

收集总结怎么用perl打开/处理.gz  zip  tar.gz压缩文件?
最近想使用perl 对文件进行压缩,但是百度了好久,方法N多,但是都只言片语。这里总结几个自己搜索到的结果。
主要有两种方法:
1、调用系统的解压缩命令

在linux 下调用tar 命令的举例如下:
tar_name = "tar_example".".tar.gz";
$cmd = "tar -cvfz $tar_name test1.pl test2.pl";
system($cmd);
或者
tar xvfz $_` for @ARGV;
使用PERL直接读取压缩文件 use pipe
.gz格式文件
open(FIN,"gzip -dc $infilename|") or die ("can not open $infilename\n");
.tgz(.tar.gz)格式文件
open(FIN,"tar -xf $infilename -o|") or die ("can not open $infilename\n");
7zip格式文件
open(FIN,"7za e -so $infilename|") or die ("can not open $infilename\n");
2、使用perl 提供的解压缩模块
但是由于操作系统OS各异,实现起来还是有区别的。由于不同操作系统支持以及安装的模块包不同,所以需要区别对待。
目前知道的模块有Archive::Tar、Compress::Zlib、Archive::Zip、IO::Compress::Gzip、PerlIO::gzip
关于各模块的使用帮助可以参与好似有命令perldoc <模块名> 进行查询
如果为了可移植性,可以用Archive::Tar处理tgz文件,用IO::Zlib处理gz文件。
由于Archive::Tar需要把整个包读入内存,资源消耗大且很慢,只能用于较小的tgz文件。

目前我的程序是在windows下面运行的。
最后我的做法是,
(1)用Archive::Tar处理.tar, .tar.gz, .tgz文件。
(2)用Compress::Zlib处理.gz文件。
(3)用Archive::Zip处理.zip文件.

linux 下使用
IO::Compress::Gzip,但是这个模块有个小问题 它不能把多个文件同时压缩在一个文件里面 并且压缩前和压缩后的文件名得相同。

Archive::Tar; 的使用例子:
#!/usr/bin/perl
use Archive::Tar;

my @files = <*>;
my $target = 'my.tgz';
my $tar = Archive::Tar->new();
$tar->add_files(@files);
$tar->write($target, COMPRESS_GZIP);

Archive::Zip的使用例子:
#!/usr/bin/perl

use strict;
use warnings;
use Archive::Zip qw( :ERROR_CODES :CONSTANTS );
my $zip = Archive::Zip->new();
$zip->addFile("/home/admin/simple.pl","simples.pl");
$zip->addTree("/home/admin","admins");

unless ( $zip->writeToFileNamed('/usr/zip.zip') == AZ_OK )
{   
        print "失败!\n";
}
else
{   
        print "成功!\n";
}

权限不够的话,可以安装到自己家目录下,比如使用Local::lib 安装
用PerlIO包的用法举例:
1)在*.pl前加上
 use lib "/libPath";
 use PerlIO::gzip;

2)在用的时候:

open FI, "<:gzip", "$fi";
open FO, ">:gzip", "$fo";
3. 用 File::Package;

 #!/usr/bin/perl -w
use strict;
use File::Package;
 
my $uut='Tie::Gzip';
my $fp='File::Package';
$fp->load_package($uut);
 
tie *GZIP,'Tie::Gzip';
my $gzip=\*GZIP;
open($gzip,"> test.gz");
 
while(my $line=<$gzip>){
chomp $line;
print"$line\n";
}
close $gzip;
 
tie *OUT,'Tie::Gzip';
my $out=\*OUT;
open($out,"> test.gz");
print $out "I want to know more!\n"
close $out;

分页: 1/3 第一页 1 2 3 下页 最后页 [ 显示模式: 摘要 | 列表 ]