2009年8月8日星期六

[PerlChina] Re: perl识别验证码的问题

refer
http://bbs3.chinaunix.net/thread-1360950-1-1.html

On 8月9日, 上午1时10分, Beckheng Lam <bi.ken....@gmail.com> wrote:
> 记得y6cme有研究过。
>
> perlchina wrote:
>
> > 不知道各位有什么思路没?或者有好的模块给推荐一下
>
> > ------------------------------------------------------------------------
>
> --
> Perl乐事 --http://www.perlersh.org
> 我的博客 --http://www.perlersh.org/blog.html
--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: 16进制文件操作

tell Returns the current position *in bytes* for FILEHANDLE
非常感谢

On 8月9日, 上午2时20分, Anthony WU <anthonywu...@gmail.com> wrote:
> my $tmp;
> open (my $fp, '+<', 'filename');
> binmode ($fp);
> read ($fp, $tmp, 0x8f);
> .................
> seek ($fp, 0xb0, 0);
> read ($fp, $tmp, (-s $fp) - tell ($fp));
> .................
> close ($fp);
>
>
>
> -------- Original Message --------
> Subject: [PerlChina] Re: 16进制文件操作
> From: perlw01f <p3r1w...@gmail.com>
> To: PerlChina Mongers 讨论组 <perlchina@googlegroups.com>
> Date: 8/8/2009 23:51
> > 接问一句 如何 读取 0x00-0x8f ?
> > 我先 binmode 再 read 貌似不好使?
>
> >> On 8月8日, 下午7时24分, Anthony WU <anthonywu...@gmail.com> wrote:> 我把 seek 第二 及第三個參數寫反了,刪除是不能的,但你可以通過 先讀
>
> >>> 0x00-0x8f 跳到0xb0再讀到EOF並把所取得的BYTES寫到新檔案
>
> >>> -------- Original Message --------
> >>> Subject: [PerlChina] Re: 16进制文件操作
> >>> From: perlw01f <p3r1w...@gmail.com>
> >>> To: PerlChina Mongers 讨论组 <perlchina@googlegroups.com>
> >>> Date: 8/8/2009 10:42
>
> >>>> 谢谢
> >>>> perldoc -f seek的结论貌似跟这个不一样 ?
>
> >>>> seek FILEHANDLE,POSITION,WHENCE
> >>>> Sets FILEHANDLE's position, just like the "fseek" call of
> >>>> "stdio". FILEHANDLE may be an expression whose value gives
> >>>> the
> >>>> name of the filehandle. The values for WHENCE are 0 to set
> >>>> the
> >>>> new position *in bytes* to POSITION, 1 to set it to the
> >>>> current
> >>>> position plus POSITION, and 2 to set it to EOF plus POSITION
> >>>> (typically negative). For WHENCE you may use the constants
> >>>> "SEEK_SET", "SEEK_CUR", and "SEEK_END" (start of the file,
> >>>> current position, end of the file) from the Fcntl module.
> >>>> Returns 1 upon success, 0 otherwise.
>
> >>>> Note the *in bytes*: even if the filehandle has been set to
> >>>> operate on characters (for example by using the ":utf8" open
> >>>> layer), tell() will return byte offsets, not character
> >>>> offsets
> >>>> (because implementing that would render seek() and tell()
> >>>> rather
> >>>> slow).
>
> >>>> If you want to position file for "sysread" or "syswrite",
> >>>> don't
> >>>> use "seek"--buffering makes its effect on the file's system
> >>>> position unpredictable and non-portable. Use "sysseek"
> >>>> instead.
>
> >>>> Due to the rules and rigors of ANSI C, on some systems you
> >>>> have
> >>>> to do a seek whenever you switch between reading and
> >>>> writing.
> >>>> Amongst other things, this may have the effect of calling
> >>>> stdio's clearerr(3). A WHENCE of 1 ("SEEK_CUR") is useful
> >>>> for
> >>>> not moving the file position:
>
> >>>> seek(TEST,0,1);
>
> >>>> This is also useful for applications emulating "tail -f".
> >>>> Once
> >>>> you hit EOF on your read, and then sleep for a while, you
> >>>> might
> >>>> have to stick in a seek() to reset things. The "seek"
> >>>> doesn't
> >>>> change the current position, but it *does* clear the end-of-
> >>>> file
> >>>> condition on the handle, so that the next "<FILE>" makes
> >>>> Perl
> >>>> try again to read something. We hope.
>
> >>>> If that doesn't work (some IO implementations are
> >>>> particularly
> >>>> cantankerous), then you may need something more like this:
>
> >>>> for (;;) {
> >>>> for ($curpos = tell(FILE); $_ = <FILE>;
> >>>> $curpos = tell(FILE)) {
> >>>> # search for some stuff and put it into files
> >>>> }
> >>>> sleep($for_a_while);
> >>>> seek(FILE, $curpos, 0);
> >>>> }
>
> >>>> 另外,您的code 我尝试了一下
> >>>> seek ($fp, 0, 0x80);
> >>>> print $fp "\x0";
> >>>> 实际的效果是 00000000h这一行 第1和2字节变成了0 没有偏移?
> >>>> 我自己尝试
> >>>> seek ($fp, 16*8, 0x00);
> >>>> print $fp "\x0";
> >>>> 可以达到目的
>
> >>>> 另外 我想请教 如何删除掉一部分内容呢 比如 0x90-0xb0
> >>>> 谢谢
> >>>> On 8月8日, 上午12时48分, Anthony WU <anthonywu...@gmail.com> wrote:
>
> >>>>> 以你所說的操作大約是
> >>>>> open (my $fp, '+<', 'x.dat');
> >>>>> binmode ($fp);
> >>>>> seek ($fp, 0, 0x80);
> >>>>> print $fp "\x0";
> >>>>> seek ($fp, 0, 0x82);
> >>>>> print $fp "\x0";
> >>>>> seek ($fp, 0, 0x84);
> >>>>> print $fp "\x0";
> >>>>> seek ($fp, 0, 0x86);
> >>>>> print $fp "\x8B";
> >>>>> seek ($fp, 0, 0x87);
> >>>>> print $fp "\x8B";
> >>>>> seek ($fp, 0, 0x88);
> >>>>> print $fp "\x0A";
> >>>>> seek ($fp, 0, 0x89);
> >>>>> print $fp "\x0A";
> >>>>> ....
> >>>>> ....
> >>>>> ....
> >>>>> close ($fp);
>
> >>>>> -------- Original Message --------
> >>>>> Subject: [PerlChina] Re: 16进制文件操作
> >>>>> From: perlw01f <p3r1w...@gmail.com>
> >>>>> To: PerlChina Mongers 讨论组 <perlchina@googlegroups.com>
> >>>>> Date: 7/8/2009 21:16
>
> >>>>>> 都是在确定的位置
>
> >>>>>> 如 00000080h 这一栏 第1 3 5 字节换为0 78换为8B 9 10 换为0A 还有一些其他的
>
> >>>>>> On 8月7日, 下午9时04分, Anthony WU <anthonywu...@gmail.com> wrote:
>
> >>>>>>> 你的字節是定位修改的嗎?有什麼規律的?
>
> >>>>>>> -------- Original Message --------
> >>>>>>> Subject: [PerlChina] Re: 16进制文件操作
> >>>>>>> From: perlw01f <p3r1w...@gmail.com>
> >>>>>>> To: PerlChina Mongers 讨论组 <perlchina@googlegroups.com>
> >>>>>>> Date: 7/8/2009 20:56
>
> >>>>>>>> 我有一个文件 x.dat,由x.rar.gz压缩而成 但是其中某些字节做了修改处理 现在的文件名是 a.dat
> >>>>>>>> 现在 我想逆行操作,即
> >>>>>>>> 先将a.date rename成x.rar.gz 然后利用ue修改某些字节 之后才能解压缩成x.date
>
> >>>>>>>> 由于文件数量较多 且ue 16进制 修改也不是很方便
> >>>>>>>> 所以想 用 perl实现
> >>>>>>>> 谢谢
>
> >>>>>>>> On 8月7日, 下午5时17分, cnhack TNT <cnhack...@gmail.com> wrote:
>
> >>>>>>>>> 能举例说明你要做的事情么?
>
> >>>>>>>>> 2009/8/7 perlw01f <p3r1w...@gmail.com>
>
> >>>>>>>>>> perl中 有没有类似ultredit中那种直接转换成16进制进行操作的方法或者module
>
> >>>>>>>>>> unpack是不是太费事了
>
> >>>>>>> --
> >>>>>>> Best Regards,
> >>>>>>> Anthony WU
>
> >>>>> --
> >>>>> Best Regards,
> >>>>> Anthony WU
>
> >>> --
> >>> Best Regards,
> >>> Anthony WU
>
> --
> Best Regards,
> Anthony WU
--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: 16进制文件操作

my $tmp;
open (my $fp, '+<', 'filename');
binmode ($fp);
read ($fp, $tmp, 0x8f);
.................
seek ($fp, 0xb0, 0);
read ($fp, $tmp, (-s $fp) - tell ($fp));
.................
close ($fp);


-------- Original Message  --------
Subject: [PerlChina] Re: 16½øÖÆÎļþ²Ù×÷
From: perlw01f <p3r1w01f@gmail.com>
To: PerlChina Mongers ÌÖÂÛ×é <perlchina@googlegroups.com>
Date: 8/8/2009 23:51
½ÓÎÊÒ»¾ä ÈçºÎ ¶ÁÈ¡  0x00-0x8f £¿ ÎÒÏÈ binmode ÔÙ read òËƲ»ºÃʹ£¿   
On 8ÔÂ8ÈÕ, ÏÂÎç7ʱ24·Ö, Anthony WU <anthonywu...@gmail.com> wrote:> ÎÒ°Ñ seek µÚ¶þ ¼°µÚÈý‚€…¢"µŒ'·´ÁË£¬„h³ýÊDz»Äܵģ¬µ«Äã¿ÉÒÔͨß^ ÏÈ×x     
0x00-0x8f Ìøµ½0xb0ÔÙ×xµ½EOFK°ÑËùÈ¡µÃµÄBYTESŒ'µ½Ð™n°¸       
-------- Original Message -------- Subject: [PerlChina] Re: 16½øÖÆÎļþ²Ù×÷ From: perlw01f <p3r1w...@gmail.com> To: PerlChina Mongers ÌÖÂÛ×é <perlchina@googlegroups.com> Date: 8/8/2009 10:42       
лл perldoc -f seekµÄ½áÂÛòËƸúÕâ¸ö²»Ò»Ñù £¿         
  seek FILEHANDLE,POSITION,WHENCE           Sets FILEHANDLE's position, just like the "fseek" call of           "stdio". FILEHANDLE may be an expression whose value gives the           name of the filehandle. The values for WHENCE are 0 to set the           new position *in bytes* to POSITION, 1 to set it to the current           position plus POSITION, and 2 to set it to EOF plus POSITION           (typically negative). For WHENCE you may use the constants           "SEEK_SET", "SEEK_CUR", and "SEEK_END" (start of the file,           current position, end of the file) from the Fcntl module.           Returns 1 upon success, 0 otherwise.         
          Note the *in bytes*: even if the filehandle has been set to           operate on characters (for example by using the ":utf8" open           layer), tell() will return byte offsets, not character offsets           (because implementing that would render seek() and tell() rather           slow).         
          If you want to position file for "sysread" or "syswrite", don't           use "seek"--buffering makes its effect on the file's system           position unpredictable and non-portable. Use "sysseek" instead.         
          Due to the rules and rigors of ANSI C, on some systems you have           to do a seek whenever you switch between reading and writing.           Amongst other things, this may have the effect of calling           stdio's clearerr(3). A WHENCE of 1 ("SEEK_CUR") is useful for           not moving the file position:         
              seek(TEST,0,1);         
          This is also useful for applications emulating "tail -f". Once           you hit EOF on your read, and then sleep for a while, you might           have to stick in a seek() to reset things. The "seek" doesn't           change the current position, but it *does* clear the end-of- file           condition on the handle, so that the next "<FILE>" makes Perl           try again to read something. We hope.         
          If that doesn't work (some IO implementations are particularly           cantankerous), then you may need something more like this:         
              for (;;) {                   for ($curpos = tell(FILE); $_ = <FILE>;                        $curpos = tell(FILE)) {                       # search for some stuff and put it into files                   }                   sleep($for_a_while);                   seek(FILE, $curpos, 0);               }         
ÁíÍ⣬ÄúµÄcode ÎÒ³¢ÊÔÁËһϠseek ($fp, 0, 0x80); print $fp "\x0"; ʵ¼ÊµÄЧ¹ûÊÇ 00000000hÕâÒ»ÐÐ µÚ1ºÍ2×Ö½Ú±ä³ÉÁË0 ûÓÐÆ«ÒÆ£¿ ÎÒ×Ô¼º³¢ÊÔ seek ($fp, 16*8, 0x00); print $fp "\x0"; ¿ÉÒԴﵽĿµÄ         
ÁíÍâ ÎÒÏëÇë½Ì ÈçºÎɾ³ýµôÒ»²¿·ÖÄÚÈÝÄØ ±ÈÈç 0x90-0xb0 лл On 8ÔÂ8ÈÕ, ÉÏÎç12ʱ48·Ö, Anthony WU <anthonywu...@gmail.com> wrote:         
ÒÔÄãËùÕfµÄ²Ù×÷´ó¼sÊÇ open (my $fp, '+<', 'x.dat'); binmode ($fp); seek ($fp, 0, 0x80); print $fp "\x0"; seek ($fp, 0, 0x82); print $fp "\x0"; seek ($fp, 0, 0x84); print $fp "\x0"; seek ($fp, 0, 0x86); print $fp "\x8B"; seek ($fp, 0, 0x87); print $fp "\x8B"; seek ($fp, 0, 0x88); print $fp "\x0A"; seek ($fp, 0, 0x89); print $fp "\x0A"; .... .... .... close ($fp);           
-------- Original Message -------- Subject: [PerlChina] Re: 16½øÖÆÎļþ²Ù×÷ From: perlw01f <p3r1w...@gmail.com> To: PerlChina Mongers ÌÖÂÛ×é <perlchina@googlegroups.com> Date: 7/8/2009 21:16           
¶¼ÊÇÔÚÈ·¶¨µÄλÖà             
Èç 00000080h ÕâÒ»À¸ µÚ1 3  5 ×Ö½Ú»»Îª0 78»»Îª8B  9 10 »»Îª0A »¹ÓÐһЩÆäËûµÄ             
On 8ÔÂ7ÈÕ, ÏÂÎç9ʱ04·Ö, Anthony WU <anthonywu...@gmail.com> wrote:             
ÄãµÄ×Ö¹ÊǶ¨Î»Ð޸ĵĆ᣿ÓÐʲüNÒŽÂɵģ¿               
-------- Original Message -------- Subject: [PerlChina] Re: 16½øÖÆÎļþ²Ù×÷ From: perlw01f <p3r1w...@gmail.com> To: PerlChina Mongers ÌÖÂÛ×é <perlchina@googlegroups.com> Date: 7/8/2009 20:56               
ÎÒÓÐÒ»¸öÎļþ x.dat£¬ÓÉx.rar.gzѹËõ¶ø³É µ«ÊÇÆäÖÐijЩ×Ö½Ú×öÁËÐ޸Ĵ¦Àí ÏÖÔÚµÄÎļþÃûÊÇ a.dat ÏÖÔÚ ÎÒÏëÄæÐвÙ×÷£¬¼´ ÏȽ«a.date rename³Éx.rar.gz È»ºóÀûÓÃueÐÞ¸ÄijЩ×Ö½Ú Ö®ºó²ÅÄܽâѹËõ³Éx.date                 
ÓÉÓÚÎļþÊýÁ¿½Ï¶à ÇÒue 16½øÖÆ ÐÞ¸ÄÒ²²»ÊǺܷ½±ã ËùÒÔÏë Óà perlʵÏÖ Ð»Ð»                 
On 8ÔÂ7ÈÕ, ÏÂÎç5ʱ17·Ö, cnhack TNT <cnhack...@gmail.com> wrote:                 
ÄܾÙÀý˵Ã÷ÄãÒª×öµÄÊÂÇéô£¿                   
2009/8/7 perlw01f <p3r1w...@gmail.com>                   
perlÖÐ ÓÐûÓÐÀàËÆultreditÖÐÄÇÖÖÖ±½Óת»»³É16½øÖƽøÐвÙ×÷µÄ·½·¨»òÕßmodule                     
unpackÊDz»ÊÇÌ«·ÑÊÂÁË                     
-- Best Regards,         Anthony WU               
-- Best Regards,         Anthony WU           
-- Best Regards,         Anthony WU       
    

--  Best Regards, 	Anthony WU

--~--~---------~--~----~------------~-------~--~----~
ÄúÊÕµ½´ËÐÅÏ¢ÊÇÓÉÓÚÄú¶©ÔÄÁË Google ÂÛ̳¡°PerlChina Mongers ÌÖÂÛ×顱ÂÛ̳¡£
 ÒªÔÚ´ËÂÛ̳·¢Ìû£¬Çë·¢µç×ÓÓʼþµ½ perlchina@googlegroups.com
 ÒªÍ˶©´ËÂÛ̳£¬Çë·¢ÓʼþÖÁ perlchina+unsubscribe@googlegroups.com
 ¸ü¶àÑ¡ÏÇëͨ¹ý http://groups.google.com/group/perlchina?hl=zh-CN ·ÃÎʸÃÂÛ̳

-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: perl识别验证码的问题

¼ÇµÃy6cmeÓÐÑо¿¹ý¡£

perlchina wrote:


²»ÖªµÀ¸÷λÓÐʲô˼·û£¿»òÕßÓкõÄÄ£¿é¸øÍƼöÒ»ÏÂ





--  PerlÀÖÊ -- http://www.perlersh.org ÎҵIJ©¿Í -- http://www.perlersh.org/blog.html 

--~--~---------~--~----~------------~-------~--~----~
ÄúÊÕµ½´ËÐÅÏ¢ÊÇÓÉÓÚÄú¶©ÔÄÁË Google ÂÛ̳¡°PerlChina Mongers ÌÖÂÛ×顱ÂÛ̳¡£
 ÒªÔÚ´ËÂÛ̳·¢Ìû£¬Çë·¢µç×ÓÓʼþµ½ perlchina@googlegroups.com
 ÒªÍ˶©´ËÂÛ̳£¬Çë·¢ÓʼþÖÁ perlchina+unsubscribe@googlegroups.com
 ¸ü¶àÑ¡ÏÇëͨ¹ý http://groups.google.com/group/perlchina?hl=zh-CN ·ÃÎʸÃÂÛ̳

-~----------~----~----~----~------~----~------~--~---

[PerlChina] perl识别验证码的问题



不知道各位有什么思路没?或者有好的模块给推荐一下



没有广告的终身免费邮箱,www.yeah.net --~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
 要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
 要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
 更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛

-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: 脚本开发工具Script.NET 2.2版本发布



2009/8/8 Huangj <redspid@163.com>
对于新人也建议学学 Vim 了,一劳永逸的事情。编辑效率全宇宙第一。支持数百种编程语言、命令脚本、配置文件 的语法高亮。配合插件实现超强IDE功能,可运行于几乎所有主流操作系统。

Emacs 党含笑而过。 



在2009-08-08,blueant <script.net@gmail.com> 写道:

Script.NET可以支持Tcl、Python、Perl、Ruby、Lua脚本的编辑、调试,2.2版本在编辑器的易用性方面有较大的改进,主 要 更新如下: - 完善打开文件的状态保存,可以在程序关闭时保存打开的文档以及每个文档的编辑状态,支持保存和加载Session文件; - 完善编辑器模块,使用Scintilla替换旧版本的编辑器,支持代码折叠、代码隐藏、行号显示,支持单词、关键字自动完成,支持语法标记高亮显 示 等功能,支持UTF-8等文件编码,支持导出为Html、RTF文档; - 完善各种脚本的调试功能,优化变量、对象、函数、堆栈调试窗口,对大部分脚本可以较好的支持数组、哈希类型变量以及对象的内容展开显示,可以更好 的 进行错误行定位; - 完善查找替换功能,可以将查找到的行信息显示在停靠窗口,可以选择性进行替换,支持正则表达式(目前对UTF-8编码的中文查找支持还不完 善); - 优化控制台功能,可以将控制台打开在停靠窗口中,方便调试过程中通过控制台进行更灵活的控制和定位; - 增加崩溃报告功能,在程序出现异常导致崩溃的时候会自动生成崩溃诊断文件,用户可以自动或人工反馈崩溃诊断文件,方便我们进行故障定位; - 增加Windows右键菜单关联功能,完善脚本文件的关联设置; - 完善图像编辑器模块,基于CxImage6.0开发,增强了图像处理功能; - 完善编辑器的提示功能,支持鼠标移动到单词上的tooltip提示,调试状态下还支持变量信息的tooltip提示  可以到蓝蚂蚁工作室网站下载这个版本: http://www.blueantstudio.net   可以参考CSDN论坛的帖子: http://topic.csdn.net/u/20090805/22/e294fc81-e9a8-4c15-8a16-45c1aa4cb35f.html?97497    



没有广告的终身免费邮箱,www.yeah.net



--
话题越大,废话越多;名字越火星,问题越脑残。
……

劉鑫
March.Liu

--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
 要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
 要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
 更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛

-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: 16进制文件操作

接问一句 如何 读取 0x00-0x8f ?
我先 binmode 再 read 貌似不好使?
>
> On 8月8日, 下午7时24分, Anthony WU <anthonywu...@gmail.com> wrote:> 我把 seek 第二 及第三個參數寫反了,刪除是不能的,但你可以通過 先讀
> > 0x00-0x8f 跳到0xb0再讀到EOF並把所取得的BYTES寫到新檔案
>
> > -------- Original Message --------
> > Subject: [PerlChina] Re: 16进制文件操作
> > From: perlw01f <p3r1w...@gmail.com>
> > To: PerlChina Mongers 讨论组 <perlchina@googlegroups.com>
> > Date: 8/8/2009 10:42
> > > 谢谢
> > > perldoc -f seek的结论貌似跟这个不一样 ?
>
> > > seek FILEHANDLE,POSITION,WHENCE
> > > Sets FILEHANDLE's position, just like the "fseek" call of
> > > "stdio". FILEHANDLE may be an expression whose value gives
> > > the
> > > name of the filehandle. The values for WHENCE are 0 to set
> > > the
> > > new position *in bytes* to POSITION, 1 to set it to the
> > > current
> > > position plus POSITION, and 2 to set it to EOF plus POSITION
> > > (typically negative). For WHENCE you may use the constants
> > > "SEEK_SET", "SEEK_CUR", and "SEEK_END" (start of the file,
> > > current position, end of the file) from the Fcntl module.
> > > Returns 1 upon success, 0 otherwise.
>
> > > Note the *in bytes*: even if the filehandle has been set to
> > > operate on characters (for example by using the ":utf8" open
> > > layer), tell() will return byte offsets, not character
> > > offsets
> > > (because implementing that would render seek() and tell()
> > > rather
> > > slow).
>
> > > If you want to position file for "sysread" or "syswrite",
> > > don't
> > > use "seek"--buffering makes its effect on the file's system
> > > position unpredictable and non-portable. Use "sysseek"
> > > instead.
>
> > > Due to the rules and rigors of ANSI C, on some systems you
> > > have
> > > to do a seek whenever you switch between reading and
> > > writing.
> > > Amongst other things, this may have the effect of calling
> > > stdio's clearerr(3). A WHENCE of 1 ("SEEK_CUR") is useful
> > > for
> > > not moving the file position:
>
> > > seek(TEST,0,1);
>
> > > This is also useful for applications emulating "tail -f".
> > > Once
> > > you hit EOF on your read, and then sleep for a while, you
> > > might
> > > have to stick in a seek() to reset things. The "seek"
> > > doesn't
> > > change the current position, but it *does* clear the end-of-
> > > file
> > > condition on the handle, so that the next "<FILE>" makes
> > > Perl
> > > try again to read something. We hope.
>
> > > If that doesn't work (some IO implementations are
> > > particularly
> > > cantankerous), then you may need something more like this:
>
> > > for (;;) {
> > > for ($curpos = tell(FILE); $_ = <FILE>;
> > > $curpos = tell(FILE)) {
> > > # search for some stuff and put it into files
> > > }
> > > sleep($for_a_while);
> > > seek(FILE, $curpos, 0);
> > > }
>
> > > 另外,您的code 我尝试了一下
> > > seek ($fp, 0, 0x80);
> > > print $fp "\x0";
> > > 实际的效果是 00000000h这一行 第1和2字节变成了0 没有偏移?
> > > 我自己尝试
> > > seek ($fp, 16*8, 0x00);
> > > print $fp "\x0";
> > > 可以达到目的
>
> > > 另外 我想请教 如何删除掉一部分内容呢 比如 0x90-0xb0
> > > 谢谢
> > > On 8月8日, 上午12时48分, Anthony WU <anthonywu...@gmail.com> wrote:
>
> > >> 以你所說的操作大約是
> > >> open (my $fp, '+<', 'x.dat');
> > >> binmode ($fp);
> > >> seek ($fp, 0, 0x80);
> > >> print $fp "\x0";
> > >> seek ($fp, 0, 0x82);
> > >> print $fp "\x0";
> > >> seek ($fp, 0, 0x84);
> > >> print $fp "\x0";
> > >> seek ($fp, 0, 0x86);
> > >> print $fp "\x8B";
> > >> seek ($fp, 0, 0x87);
> > >> print $fp "\x8B";
> > >> seek ($fp, 0, 0x88);
> > >> print $fp "\x0A";
> > >> seek ($fp, 0, 0x89);
> > >> print $fp "\x0A";
> > >> ....
> > >> ....
> > >> ....
> > >> close ($fp);
>
> > >> -------- Original Message --------
> > >> Subject: [PerlChina] Re: 16进制文件操作
> > >> From: perlw01f <p3r1w...@gmail.com>
> > >> To: PerlChina Mongers 讨论组 <perlchina@googlegroups.com>
> > >> Date: 7/8/2009 21:16
>
> > >>> 都是在确定的位置
>
> > >>> 如 00000080h 这一栏 第1 3 5 字节换为0 78换为8B 9 10 换为0A 还有一些其他的
>
> > >>> On 8月7日, 下午9时04分, Anthony WU <anthonywu...@gmail.com> wrote:
>
> > >>>> 你的字節是定位修改的嗎?有什麼規律的?
>
> > >>>> -------- Original Message --------
> > >>>> Subject: [PerlChina] Re: 16进制文件操作
> > >>>> From: perlw01f <p3r1w...@gmail.com>
> > >>>> To: PerlChina Mongers 讨论组 <perlchina@googlegroups.com>
> > >>>> Date: 7/8/2009 20:56
>
> > >>>>> 我有一个文件 x.dat,由x.rar.gz压缩而成 但是其中某些字节做了修改处理 现在的文件名是 a.dat
> > >>>>> 现在 我想逆行操作,即
> > >>>>> 先将a.date rename成x.rar.gz 然后利用ue修改某些字节 之后才能解压缩成x.date
>
> > >>>>> 由于文件数量较多 且ue 16进制 修改也不是很方便
> > >>>>> 所以想 用 perl实现
> > >>>>> 谢谢
>
> > >>>>> On 8月7日, 下午5时17分, cnhack TNT <cnhack...@gmail.com> wrote:
>
> > >>>>>> 能举例说明你要做的事情么?
>
> > >>>>>> 2009/8/7 perlw01f <p3r1w...@gmail.com>
>
> > >>>>>>> perl中 有没有类似ultredit中那种直接转换成16进制进行操作的方法或者module
>
> > >>>>>>> unpack是不是太费事了
>
> > >>>> --
> > >>>> Best Regards,
> > >>>> Anthony WU
>
> > >> --
> > >> Best Regards,
> > >> Anthony WU
>
> > --
> > Best Regards,
> > Anthony WU
--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: 脚本开发工具Script.NET 2.2版本发布

对于新人也建议学学 Vim 了,一劳永逸的事情。编辑效率全宇宙第一。支持数百种编程语言、命令脚本、配置文件 的语法高亮。配合插件实现超强IDE功能,可运行于几乎所有主流操作系统。


在2009-08-08,blueant <script.net@gmail.com> 写道:
Script.NET可以支持Tcl、Python、Perl、Ruby、Lua脚本的编辑、调试,2.2版本在编辑器的易用性方面有较大的改进,主 要 更新如下: - 完善打开文件的状态保存,可以在程序关闭时保存打开的文档以及每个文档的编辑状态,支持保存和加载Session文件; - 完善编辑器模块,使用Scintilla替换旧版本的编辑器,支持代码折叠、代码隐藏、行号显示,支持单词、关键字自动完成,支持语法标记高亮显 示 等功能,支持UTF-8等文件编码,支持导出为Html、RTF文档; - 完善各种脚本的调试功能,优化变量、对象、函数、堆栈调试窗口,对大部分脚本可以较好的支持数组、哈希类型变量以及对象的内容展开显示,可以更好 的 进行错误行定位; - 完善查找替换功能,可以将查找到的行信息显示在停靠窗口,可以选择性进行替换,支持正则表达式(目前对UTF-8编码的中文查找支持还不完 善); - 优化控制台功能,可以将控制台打开在停靠窗口中,方便调试过程中通过控制台进行更灵活的控制和定位; - 增加崩溃报告功能,在程序出现异常导致崩溃的时候会自动生成崩溃诊断文件,用户可以自动或人工反馈崩溃诊断文件,方便我们进行故障定位; - 增加Windows右键菜单关联功能,完善脚本文件的关联设置; - 完善图像编辑器模块,基于CxImage6.0开发,增强了图像处理功能; - 完善编辑器的提示功能,支持鼠标移动到单词上的tooltip提示,调试状态下还支持变量信息的tooltip提示  可以到蓝蚂蚁工作室网站下载这个版本: http://www.blueantstudio.net   可以参考CSDN论坛的帖子: http://topic.csdn.net/u/20090805/22/e294fc81-e9a8-4c15-8a16-45c1aa4cb35f.html?97497    



没有广告的终身免费邮箱,www.yeah.net --~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
 要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
 要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
 更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛

-~----------~----~----~----~------~----~------~--~---

[PerlChina] 脚本开发工具Script.NET 2.2版本发布

Script.NET可以支持Tcl、Python、Perl、Ruby、Lua脚本的编辑、调试,2.2版本在编辑器的易用性方面有较大的改进,主

更新如下:
- 完善打开文件的状态保存,可以在程序关闭时保存打开的文档以及每个文档的编辑状态,支持保存和加载Session文件;
- 完善编辑器模块,使用Scintilla替换旧版本的编辑器,支持代码折叠、代码隐藏、行号显示,支持单词、关键字自动完成,支持语法标记高亮显

等功能,支持UTF-8等文件编码,支持导出为Html、RTF文档;
- 完善各种脚本的调试功能,优化变量、对象、函数、堆栈调试窗口,对大部分脚本可以较好的支持数组、哈希类型变量以及对象的内容展开显示,可以更好

进行错误行定位;
- 完善查找替换功能,可以将查找到的行信息显示在停靠窗口,可以选择性进行替换,支持正则表达式(目前对UTF-8编码的中文查找支持还不完
善);
- 优化控制台功能,可以将控制台打开在停靠窗口中,方便调试过程中通过控制台进行更灵活的控制和定位;
- 增加崩溃报告功能,在程序出现异常导致崩溃的时候会自动生成崩溃诊断文件,用户可以自动或人工反馈崩溃诊断文件,方便我们进行故障定位;
- 增加Windows右键菜单关联功能,完善脚本文件的关联设置;
- 完善图像编辑器模块,基于CxImage6.0开发,增强了图像处理功能;
- 完善编辑器的提示功能,支持鼠标移动到单词上的tooltip提示,调试状态下还支持变量信息的tooltip提示

可以到蓝蚂蚁工作室网站下载这个版本:
http://www.blueantstudio.net


可以参考CSDN论坛的帖子:
http://topic.csdn.net/u/20090805/22/e294fc81-e9a8-4c15-8a16-45c1aa4cb35f.html?97497


--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: 关于NET::telnet的窗口大小问题;


 
好像Term::**   管这个 事情的, 可以查下
 
 

 
2009/8/4 Alex.Lee <liwei.workmail@gmail.com>

各位同行:
你们好,我在用perl写一个程序,telnet到某个终端,然后在该终端运行某个命令,并把命令运行的结果print到本机日志
telnet_input.log中去,但是由于该命令是读终端数据库,返回的数据每行默认不能超过80个字符。导致print回来的日志发生了自动
行,导致读日志数据很不方便,还得人工处理换行。不知道各位同仁有没有谁知道在用NET::telnet模块的时候,怎样设置返回字符的长度?我看了
NET::telnet.pm模块,里面确实有控制返回字符长度的sub TELOPT_NAMS ()方法,但是其内容是空的。是不是perl5还不
支持telnet的窗口调整?
我写的源代码如下,恳请高手不吝赐教!


use strict;
use Net::Telnet ();
my  $ip = '**.***.**.**';
my  $user = '**';
my  $passwd = '****';
my  $telnet = new Net::Telnet (Timeout => 10,
                               Prompt =>'/[\$%#><:]\s*$/');
   $telnet->open( Host=>$ip,
                      Timeout => 30);
   $telnet->login( Name=>$user,
                        Password=>$passwd,
                       Timeout => 30);
   $telnet->input_log("/test.perl/telnet_input.log");
   $telnet->output_log("/test.perl/telnet_output.log");

my  $sql = 'select ……';
   $telnet->cmd
   (
    String => "$sql",
    Prompt =>'/[\$%#><:]\s*$/',
    Timeout=> 360
   );

   $telnet->waitfor(/^\>$/i);
   $telnet->print("exit");

--
           Yours Sincerely
                   Zeng Hong

--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
 要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
 要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
 更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛

-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: 16进制文件操作

感谢!
这种方法我有想过
但是 想知道 有没有 根据文件位置 s/$aims//的办法
或者其他办法 比如说 print一个空数据?
业余初学 望见谅

On 8月8日, 下午7时24分, Anthony WU <anthonywu...@gmail.com> wrote:
> 我把 seek 第二 及第三個參數寫反了,刪除是不能的,但你可以通過 先讀
> 0x00-0x8f 跳到0xb0再讀到EOF並把所取得的BYTES寫到新檔案
>
>
>
> -------- Original Message --------
> Subject: [PerlChina] Re: 16进制文件操作
> From: perlw01f <p3r1w...@gmail.com>
> To: PerlChina Mongers 讨论组 <perlchina@googlegroups.com>
> Date: 8/8/2009 10:42
> > 谢谢
> > perldoc -f seek的结论貌似跟这个不一样 ?
>
> > seek FILEHANDLE,POSITION,WHENCE
> > Sets FILEHANDLE's position, just like the "fseek" call of
> > "stdio". FILEHANDLE may be an expression whose value gives
> > the
> > name of the filehandle. The values for WHENCE are 0 to set
> > the
> > new position *in bytes* to POSITION, 1 to set it to the
> > current
> > position plus POSITION, and 2 to set it to EOF plus POSITION
> > (typically negative). For WHENCE you may use the constants
> > "SEEK_SET", "SEEK_CUR", and "SEEK_END" (start of the file,
> > current position, end of the file) from the Fcntl module.
> > Returns 1 upon success, 0 otherwise.
>
> > Note the *in bytes*: even if the filehandle has been set to
> > operate on characters (for example by using the ":utf8" open
> > layer), tell() will return byte offsets, not character
> > offsets
> > (because implementing that would render seek() and tell()
> > rather
> > slow).
>
> > If you want to position file for "sysread" or "syswrite",
> > don't
> > use "seek"--buffering makes its effect on the file's system
> > position unpredictable and non-portable. Use "sysseek"
> > instead.
>
> > Due to the rules and rigors of ANSI C, on some systems you
> > have
> > to do a seek whenever you switch between reading and
> > writing.
> > Amongst other things, this may have the effect of calling
> > stdio's clearerr(3). A WHENCE of 1 ("SEEK_CUR") is useful
> > for
> > not moving the file position:
>
> > seek(TEST,0,1);
>
> > This is also useful for applications emulating "tail -f".
> > Once
> > you hit EOF on your read, and then sleep for a while, you
> > might
> > have to stick in a seek() to reset things. The "seek"
> > doesn't
> > change the current position, but it *does* clear the end-of-
> > file
> > condition on the handle, so that the next "<FILE>" makes
> > Perl
> > try again to read something. We hope.
>
> > If that doesn't work (some IO implementations are
> > particularly
> > cantankerous), then you may need something more like this:
>
> > for (;;) {
> > for ($curpos = tell(FILE); $_ = <FILE>;
> > $curpos = tell(FILE)) {
> > # search for some stuff and put it into files
> > }
> > sleep($for_a_while);
> > seek(FILE, $curpos, 0);
> > }
>
> > 另外,您的code 我尝试了一下
> > seek ($fp, 0, 0x80);
> > print $fp "\x0";
> > 实际的效果是 00000000h这一行 第1和2字节变成了0 没有偏移?
> > 我自己尝试
> > seek ($fp, 16*8, 0x00);
> > print $fp "\x0";
> > 可以达到目的
>
> > 另外 我想请教 如何删除掉一部分内容呢 比如 0x90-0xb0
> > 谢谢
> > On 8月8日, 上午12时48分, Anthony WU <anthonywu...@gmail.com> wrote:
>
> >> 以你所說的操作大約是
> >> open (my $fp, '+<', 'x.dat');
> >> binmode ($fp);
> >> seek ($fp, 0, 0x80);
> >> print $fp "\x0";
> >> seek ($fp, 0, 0x82);
> >> print $fp "\x0";
> >> seek ($fp, 0, 0x84);
> >> print $fp "\x0";
> >> seek ($fp, 0, 0x86);
> >> print $fp "\x8B";
> >> seek ($fp, 0, 0x87);
> >> print $fp "\x8B";
> >> seek ($fp, 0, 0x88);
> >> print $fp "\x0A";
> >> seek ($fp, 0, 0x89);
> >> print $fp "\x0A";
> >> ....
> >> ....
> >> ....
> >> close ($fp);
>
> >> -------- Original Message --------
> >> Subject: [PerlChina] Re: 16进制文件操作
> >> From: perlw01f <p3r1w...@gmail.com>
> >> To: PerlChina Mongers 讨论组 <perlchina@googlegroups.com>
> >> Date: 7/8/2009 21:16
>
> >>> 都是在确定的位置
>
> >>> 如 00000080h 这一栏 第1 3 5 字节换为0 78换为8B 9 10 换为0A 还有一些其他的
>
> >>> On 8月7日, 下午9时04分, Anthony WU <anthonywu...@gmail.com> wrote:
>
> >>>> 你的字節是定位修改的嗎?有什麼規律的?
>
> >>>> -------- Original Message --------
> >>>> Subject: [PerlChina] Re: 16进制文件操作
> >>>> From: perlw01f <p3r1w...@gmail.com>
> >>>> To: PerlChina Mongers 讨论组 <perlchina@googlegroups.com>
> >>>> Date: 7/8/2009 20:56
>
> >>>>> 我有一个文件 x.dat,由x.rar.gz压缩而成 但是其中某些字节做了修改处理 现在的文件名是 a.dat
> >>>>> 现在 我想逆行操作,即
> >>>>> 先将a.date rename成x.rar.gz 然后利用ue修改某些字节 之后才能解压缩成x.date
>
> >>>>> 由于文件数量较多 且ue 16进制 修改也不是很方便
> >>>>> 所以想 用 perl实现
> >>>>> 谢谢
>
> >>>>> On 8月7日, 下午5时17分, cnhack TNT <cnhack...@gmail.com> wrote:
>
> >>>>>> 能举例说明你要做的事情么?
>
> >>>>>> 2009/8/7 perlw01f <p3r1w...@gmail.com>
>
> >>>>>>> perl中 有没有类似ultredit中那种直接转换成16进制进行操作的方法或者module
>
> >>>>>>> unpack是不是太费事了
>
> >>>> --
> >>>> Best Regards,
> >>>> Anthony WU
>
> >> --
> >> Best Regards,
> >> Anthony WU
>
> --
> Best Regards,
> Anthony WU
--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: 16进制文件操作

我把 seek 第二 及第三個參數寫反了,刪除是不能的,但你可以通過 先讀
0x00-0x8f 跳到0xb0再讀到EOF並把所取得的BYTES寫到新檔案

-------- Original Message --------
Subject: [PerlChina] Re: 16进制文件操作
From: perlw01f <p3r1w01f@gmail.com>
To: PerlChina Mongers 讨论组 <perlchina@googlegroups.com>
Date: 8/8/2009 10:42
> 谢谢
> perldoc -f seek的结论貌似跟这个不一样 ?
>
> seek FILEHANDLE,POSITION,WHENCE
> Sets FILEHANDLE's position, just like the "fseek" call of
> "stdio". FILEHANDLE may be an expression whose value gives
> the
> name of the filehandle. The values for WHENCE are 0 to set
> the
> new position *in bytes* to POSITION, 1 to set it to the
> current
> position plus POSITION, and 2 to set it to EOF plus POSITION
> (typically negative). For WHENCE you may use the constants
> "SEEK_SET", "SEEK_CUR", and "SEEK_END" (start of the file,
> current position, end of the file) from the Fcntl module.
> Returns 1 upon success, 0 otherwise.
>
> Note the *in bytes*: even if the filehandle has been set to
> operate on characters (for example by using the ":utf8" open
> layer), tell() will return byte offsets, not character
> offsets
> (because implementing that would render seek() and tell()
> rather
> slow).
>
> If you want to position file for "sysread" or "syswrite",
> don't
> use "seek"--buffering makes its effect on the file's system
> position unpredictable and non-portable. Use "sysseek"
> instead.
>
> Due to the rules and rigors of ANSI C, on some systems you
> have
> to do a seek whenever you switch between reading and
> writing.
> Amongst other things, this may have the effect of calling
> stdio's clearerr(3). A WHENCE of 1 ("SEEK_CUR") is useful
> for
> not moving the file position:
>
> seek(TEST,0,1);
>
> This is also useful for applications emulating "tail -f".
> Once
> you hit EOF on your read, and then sleep for a while, you
> might
> have to stick in a seek() to reset things. The "seek"
> doesn't
> change the current position, but it *does* clear the end-of-
> file
> condition on the handle, so that the next "<FILE>" makes
> Perl
> try again to read something. We hope.
>
> If that doesn't work (some IO implementations are
> particularly
> cantankerous), then you may need something more like this:
>
> for (;;) {
> for ($curpos = tell(FILE); $_ = <FILE>;
> $curpos = tell(FILE)) {
> # search for some stuff and put it into files
> }
> sleep($for_a_while);
> seek(FILE, $curpos, 0);
> }
>
>
>
> 另外,您的code 我尝试了一下
> seek ($fp, 0, 0x80);
> print $fp "\x0";
> 实际的效果是 00000000h这一行 第1和2字节变成了0 没有偏移?
> 我自己尝试
> seek ($fp, 16*8, 0x00);
> print $fp "\x0";
> 可以达到目的
>
> 另外 我想请教 如何删除掉一部分内容呢 比如 0x90-0xb0
> 谢谢
> On 8月8日, 上午12时48分, Anthony WU <anthonywu...@gmail.com> wrote:
>
>> 以你所說的操作大約是
>> open (my $fp, '+<', 'x.dat');
>> binmode ($fp);
>> seek ($fp, 0, 0x80);
>> print $fp "\x0";
>> seek ($fp, 0, 0x82);
>> print $fp "\x0";
>> seek ($fp, 0, 0x84);
>> print $fp "\x0";
>> seek ($fp, 0, 0x86);
>> print $fp "\x8B";
>> seek ($fp, 0, 0x87);
>> print $fp "\x8B";
>> seek ($fp, 0, 0x88);
>> print $fp "\x0A";
>> seek ($fp, 0, 0x89);
>> print $fp "\x0A";
>> ....
>> ....
>> ....
>> close ($fp);
>>
>>
>>
>> -------- Original Message --------
>> Subject: [PerlChina] Re: 16进制文件操作
>> From: perlw01f <p3r1w...@gmail.com>
>> To: PerlChina Mongers 讨论组 <perlchina@googlegroups.com>
>> Date: 7/8/2009 21:16
>>
>>> 都是在确定的位置
>>>
>>> 如 00000080h 这一栏 第1 3 5 字节换为0 78换为8B 9 10 换为0A 还有一些其他的
>>>
>>> On 8月7日, 下午9时04分, Anthony WU <anthonywu...@gmail.com> wrote:
>>>
>>>> 你的字節是定位修改的嗎?有什麼規律的?
>>>>
>>>> -------- Original Message --------
>>>> Subject: [PerlChina] Re: 16进制文件操作
>>>> From: perlw01f <p3r1w...@gmail.com>
>>>> To: PerlChina Mongers 讨论组 <perlchina@googlegroups.com>
>>>> Date: 7/8/2009 20:56
>>>>
>>>>> 我有一个文件 x.dat,由x.rar.gz压缩而成 但是其中某些字节做了修改处理 现在的文件名是 a.dat
>>>>> 现在 我想逆行操作,即
>>>>> 先将a.date rename成x.rar.gz 然后利用ue修改某些字节 之后才能解压缩成x.date
>>>>>
>>>>> 由于文件数量较多 且ue 16进制 修改也不是很方便
>>>>> 所以想 用 perl实现
>>>>> 谢谢
>>>>>
>>>>> On 8月7日, 下午5时17分, cnhack TNT <cnhack...@gmail.com> wrote:
>>>>>
>>>>>> 能举例说明你要做的事情么?
>>>>>>
>>>>>> 2009/8/7 perlw01f <p3r1w...@gmail.com>
>>>>>>
>>>>>>> perl中 有没有类似ultredit中那种直接转换成16进制进行操作的方法或者module
>>>>>>>
>>>>>>> unpack是不是太费事了
>>>>>>>
>>>> --
>>>> Best Regards,
>>>> Anthony WU
>>>>
>> --
>> Best Regards,
>> Anthony WU
>>
> >
>
>

--
Best Regards,
Anthony WU


--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---

2009年8月7日星期五

[PerlChina] Re: 16进制文件操作

谢谢
perldoc -f seek的结论貌似跟这个不一样 ?

seek FILEHANDLE,POSITION,WHENCE
Sets FILEHANDLE's position, just like the "fseek" call of
"stdio". FILEHANDLE may be an expression whose value gives
the
name of the filehandle. The values for WHENCE are 0 to set
the
new position *in bytes* to POSITION, 1 to set it to the
current
position plus POSITION, and 2 to set it to EOF plus POSITION
(typically negative). For WHENCE you may use the constants
"SEEK_SET", "SEEK_CUR", and "SEEK_END" (start of the file,
current position, end of the file) from the Fcntl module.
Returns 1 upon success, 0 otherwise.

Note the *in bytes*: even if the filehandle has been set to
operate on characters (for example by using the ":utf8" open
layer), tell() will return byte offsets, not character
offsets
(because implementing that would render seek() and tell()
rather
slow).

If you want to position file for "sysread" or "syswrite",
don't
use "seek"--buffering makes its effect on the file's system
position unpredictable and non-portable. Use "sysseek"
instead.

Due to the rules and rigors of ANSI C, on some systems you
have
to do a seek whenever you switch between reading and
writing.
Amongst other things, this may have the effect of calling
stdio's clearerr(3). A WHENCE of 1 ("SEEK_CUR") is useful
for
not moving the file position:

seek(TEST,0,1);

This is also useful for applications emulating "tail -f".
Once
you hit EOF on your read, and then sleep for a while, you
might
have to stick in a seek() to reset things. The "seek"
doesn't
change the current position, but it *does* clear the end-of-
file
condition on the handle, so that the next "<FILE>" makes
Perl
try again to read something. We hope.

If that doesn't work (some IO implementations are
particularly
cantankerous), then you may need something more like this:

for (;;) {
for ($curpos = tell(FILE); $_ = <FILE>;
$curpos = tell(FILE)) {
# search for some stuff and put it into files
}
sleep($for_a_while);
seek(FILE, $curpos, 0);
}

另外,您的code 我尝试了一下
seek ($fp, 0, 0x80);
print $fp "\x0";
实际的效果是 00000000h这一行 第1和2字节变成了0 没有偏移?
我自己尝试
seek ($fp, 16*8, 0x00);
print $fp "\x0";
可以达到目的

另外 我想请教 如何删除掉一部分内容呢 比如 0x90-0xb0
谢谢
On 8月8日, 上午12时48分, Anthony WU <anthonywu...@gmail.com> wrote:
> 以你所說的操作大約是
> open (my $fp, '+<', 'x.dat');
> binmode ($fp);
> seek ($fp, 0, 0x80);
> print $fp "\x0";
> seek ($fp, 0, 0x82);
> print $fp "\x0";
> seek ($fp, 0, 0x84);
> print $fp "\x0";
> seek ($fp, 0, 0x86);
> print $fp "\x8B";
> seek ($fp, 0, 0x87);
> print $fp "\x8B";
> seek ($fp, 0, 0x88);
> print $fp "\x0A";
> seek ($fp, 0, 0x89);
> print $fp "\x0A";
> ....
> ....
> ....
> close ($fp);
>
>
>
> -------- Original Message --------
> Subject: [PerlChina] Re: 16进制文件操作
> From: perlw01f <p3r1w...@gmail.com>
> To: PerlChina Mongers 讨论组 <perlchina@googlegroups.com>
> Date: 7/8/2009 21:16
> > 都是在确定的位置
>
> > 如 00000080h 这一栏 第1 3 5 字节换为0 78换为8B 9 10 换为0A 还有一些其他的
>
> > On 8月7日, 下午9时04分, Anthony WU <anthonywu...@gmail.com> wrote:
>
> >> 你的字節是定位修改的嗎?有什麼規律的?
>
> >> -------- Original Message --------
> >> Subject: [PerlChina] Re: 16进制文件操作
> >> From: perlw01f <p3r1w...@gmail.com>
> >> To: PerlChina Mongers 讨论组 <perlchina@googlegroups.com>
> >> Date: 7/8/2009 20:56
>
> >>> 我有一个文件 x.dat,由x.rar.gz压缩而成 但是其中某些字节做了修改处理 现在的文件名是 a.dat
> >>> 现在 我想逆行操作,即
> >>> 先将a.date rename成x.rar.gz 然后利用ue修改某些字节 之后才能解压缩成x.date
>
> >>> 由于文件数量较多 且ue 16进制 修改也不是很方便
> >>> 所以想 用 perl实现
> >>> 谢谢
>
> >>> On 8月7日, 下午5时17分, cnhack TNT <cnhack...@gmail.com> wrote:
>
> >>>> 能举例说明你要做的事情么?
>
> >>>> 2009/8/7 perlw01f <p3r1w...@gmail.com>
>
> >>>>> perl中 有没有类似ultredit中那种直接转换成16进制进行操作的方法或者module
>
> >>>>> unpack是不是太费事了
>
> >> --
> >> Best Regards,
> >> Anthony WU
>
> --
> Best Regards,
> Anthony WU
--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: 16进制文件操作

以你所說的操作大約是
open (my $fp, '+<', 'x.dat');
binmode ($fp);
seek ($fp, 0, 0x80);
print $fp "\x0";
seek ($fp, 0, 0x82);
print $fp "\x0";
seek ($fp, 0, 0x84);
print $fp "\x0";
seek ($fp, 0, 0x86);
print $fp "\x8B";
seek ($fp, 0, 0x87);
print $fp "\x8B";
seek ($fp, 0, 0x88);
print $fp "\x0A";
seek ($fp, 0, 0x89);
print $fp "\x0A";
....
....
....
close ($fp);

-------- Original Message --------
Subject: [PerlChina] Re: 16进制文件操作
From: perlw01f <p3r1w01f@gmail.com>
To: PerlChina Mongers 讨论组 <perlchina@googlegroups.com>
Date: 7/8/2009 21:16
> 都是在确定的位置
>
> 如 00000080h 这一栏 第1 3 5 字节换为0 78换为8B 9 10 换为0A 还有一些其他的
>
>
> On 8月7日, 下午9时04分, Anthony WU <anthonywu...@gmail.com> wrote:
>
>> 你的字節是定位修改的嗎?有什麼規律的?
>>
>>
>>
>> -------- Original Message --------
>> Subject: [PerlChina] Re: 16进制文件操作
>> From: perlw01f <p3r1w...@gmail.com>
>> To: PerlChina Mongers 讨论组 <perlchina@googlegroups.com>
>> Date: 7/8/2009 20:56
>>
>>> 我有一个文件 x.dat,由x.rar.gz压缩而成 但是其中某些字节做了修改处理 现在的文件名是 a.dat
>>> 现在 我想逆行操作,即
>>> 先将a.date rename成x.rar.gz 然后利用ue修改某些字节 之后才能解压缩成x.date
>>>
>>> 由于文件数量较多 且ue 16进制 修改也不是很方便
>>> 所以想 用 perl实现
>>> 谢谢
>>>
>>> On 8月7日, 下午5时17分, cnhack TNT <cnhack...@gmail.com> wrote:
>>>
>>>> 能举例说明你要做的事情么?
>>>>
>>>> 2009/8/7 perlw01f <p3r1w...@gmail.com>
>>>>
>>>>> perl中 有没有类似ultredit中那种直接转换成16进制进行操作的方法或者module
>>>>>
>>>>> unpack是不是太费事了
>>>>>
>> --
>> Best Regards,
>> Anthony WU
>>
> >
>

--
Best Regards,
Anthony WU


--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: 16进制文件操作

谢谢
能不能用纯perl搞定?

On 8月7日, 下午9时22分, joe jiang <lamp.p...@gmail.com> wrote:
> http://merd.sourceforge.net/pixel/hexedit.html
>
> 2009/8/7 perlw01f <p3r1w...@gmail.com>
>
> > 都是在确定的位置
>
> > 如 00000080h 这一栏 第1 3 5 字节换为0 78换为8B 9 10 换为0A 还有一些其他的
>
> > On 8月7日, 下午9时04分, Anthony WU <anthonywu...@gmail.com> wrote:
> > > 你的字節是定位修改的嗎?有什麼規律的?
>
> > > -------- Original Message --------
> > > Subject: [PerlChina] Re: 16进制文件操作
> > > From: perlw01f <p3r1w...@gmail.com>
> > > To: PerlChina Mongers 讨论组 <perlchina@googlegroups.com>
> > > Date: 7/8/2009 20:56
> > > > 我有一个文件 x.dat,由x.rar.gz压缩而成 但是其中某些字节做了修改处理 现在的文件名是 a.dat
> > > > 现在 我想逆行操作,即
> > > > 先将a.date rename成x.rar.gz 然后利用ue修改某些字节 之后才能解压缩成x.date
>
> > > > 由于文件数量较多 且ue 16进制 修改也不是很方便
> > > > 所以想 用 perl实现
> > > > 谢谢
>
> > > > On 8月7日, 下午5时17分, cnhack TNT <cnhack...@gmail.com> wrote:
>
> > > >> 能举例说明你要做的事情么?
>
> > > >> 2009/8/7 perlw01f <p3r1w...@gmail.com>
>
> > > >>> perl中 有没有类似ultredit中那种直接转换成16进制进行操作的方法或者module
>
> > > >>> unpack是不是太费事了
>
> > > --
> > > Best Regards,
> > > Anthony WU
--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: 16进制文件操作

http://merd.sourceforge.net/pixel/hexedit.html

2009/8/7 perlw01f <p3r1w01f@gmail.com>
都是在确定的位置

如 00000080h 这一栏 第1 3  5 字节换为0 78换为8B  9 10 换为0A 还有一些其他的


On 8月7日, 下午9时04分, Anthony WU <anthonywu...@gmail.com> wrote:
> 你的字節是定位修改的嗎?有什麼規律的?
>
>
>
> -------- Original Message --------
> Subject: [PerlChina] Re: 16进制文件操作
> From: perlw01f <p3r1w...@gmail.com>
> To: PerlChina Mongers 讨论组 <perlchina@googlegroups.com>
> Date: 7/8/2009 20:56
> > 我有一个文件 x.dat,由x.rar.gz压缩而成 但是其中某些字节做了修改处理 现在的文件名是 a.dat
> > 现在 我想逆行操作,即
> > 先将a.date rename成x.rar.gz 然后利用ue修改某些字节 之后才能解压缩成x.date
>
> > 由于文件数量较多 且ue 16进制 修改也不是很方便
> > 所以想 用 perl实现
> > 谢谢
>
> > On 8月7日, 下午5时17分, cnhack TNT <cnhack...@gmail.com> wrote:
>
> >> 能举例说明你要做的事情么?
>
> >> 2009/8/7 perlw01f <p3r1w...@gmail.com>
>
> >>> perl中 有没有类似ultredit中那种直接转换成16进制进行操作的方法或者module
>
> >>> unpack是不是太费事了
>
> --
> Best Regards,
>         Anthony WU



--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
 要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
 要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
 更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛

-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: 16进制文件操作

都是在确定的位置

如 00000080h 这一栏 第1 3 5 字节换为0 78换为8B 9 10 换为0A 还有一些其他的


On 8月7日, 下午9时04分, Anthony WU <anthonywu...@gmail.com> wrote:
> 你的字節是定位修改的嗎?有什麼規律的?
>
>
>
> -------- Original Message --------
> Subject: [PerlChina] Re: 16进制文件操作
> From: perlw01f <p3r1w...@gmail.com>
> To: PerlChina Mongers 讨论组 <perlchina@googlegroups.com>
> Date: 7/8/2009 20:56
> > 我有一个文件 x.dat,由x.rar.gz压缩而成 但是其中某些字节做了修改处理 现在的文件名是 a.dat
> > 现在 我想逆行操作,即
> > 先将a.date rename成x.rar.gz 然后利用ue修改某些字节 之后才能解压缩成x.date
>
> > 由于文件数量较多 且ue 16进制 修改也不是很方便
> > 所以想 用 perl实现
> > 谢谢
>
> > On 8月7日, 下午5时17分, cnhack TNT <cnhack...@gmail.com> wrote:
>
> >> 能举例说明你要做的事情么?
>
> >> 2009/8/7 perlw01f <p3r1w...@gmail.com>
>
> >>> perl中 有没有类似ultredit中那种直接转换成16进制进行操作的方法或者module
>
> >>> unpack是不是太费事了
>
> --
> Best Regards,
> Anthony WU
--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: 16进制文件操作

你的字節是定位修改的嗎?有什麼規律的?

-------- Original Message  --------
Subject: [PerlChina] Re: 16进制文件操作
From: perlw01f <p3r1w01f@gmail.com>
To: PerlChina Mongers 讨论组 <perlchina@googlegroups.com>
Date: 7/8/2009 20:56
我有一个文件 x.dat,由x.rar.gz压缩而成 但是其中某些字节做了修改处理 现在的文件名是 a.dat 现在 我想逆行操作,即 先将a.date rename成x.rar.gz 然后利用ue修改某些字节 之后才能解压缩成x.date  由于文件数量较多 且ue 16进制 修改也不是很方便 所以想 用 perl实现 谢谢  On 8月7日, 下午5时17分, cnhack TNT <cnhack...@gmail.com> wrote:   
能举例说明你要做的事情么?  2009/8/7 perlw01f <p3r1w...@gmail.com>      
perl中 有没有类似ultredit中那种直接转换成16进制进行操作的方法或者module       
unpack是不是太费事了       
   

--  Best Regards, 	Anthony WU

--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
 要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
 要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
 更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛

-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: 16进制文件操作

我有一个文件 x.dat,由x.rar.gz压缩而成 但是其中某些字节做了修改处理 现在的文件名是 a.dat
现在 我想逆行操作,即
先将a.date rename成x.rar.gz 然后利用ue修改某些字节 之后才能解压缩成x.date

由于文件数量较多 且ue 16进制 修改也不是很方便
所以想 用 perl实现
谢谢

On 8月7日, 下午5时17分, cnhack TNT <cnhack...@gmail.com> wrote:
> 能举例说明你要做的事情么?
>
> 2009/8/7 perlw01f <p3r1w...@gmail.com>
>
> > perl中 有没有类似ultredit中那种直接转换成16进制进行操作的方法或者module
>
> > unpack是不是太费事了
--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: 16进制文件操作

能举例说明你要做的事情么?


2009/8/7 perlw01f <p3r1w01f@gmail.com>
perl中 有没有类似ultredit中那种直接转换成16进制进行操作的方法或者module

unpack是不是太费事了



--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
 要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
 要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
 更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛

-~----------~----~----~----~------~----~------~--~---

[PerlChina] 16进制文件操作

perl中 有没有类似ultredit中那种直接转换成16进制进行操作的方法或者module

unpack是不是太费事了
--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---

2009年8月6日星期四

[PerlChina] Re: 错误处理

perl -MCarp=verbose -e "package pack; sub pub { Carp::carp(qq(hello)); print q(world); }; pub;" 
hello at -e line 1
pack::pub() called at -e line 1
world

这个模块也不错,一直看到有人用,今天尝试了一下感觉还不错。

2009/8/7 yi wang <wangyi2412@gmail.com>
学习了,谢谢!

2009/8/7 smallfish <smallfish.xy@gmail.com>

同理,偶也喜欢die。
--
blog: http://hi.baidu.com/smallfish_xy


2009/8/7 Qiang (James) <shijialee@gmail.com>

yi wang wrote:
> 诸位,请教大家一个开放问题
> 诸位在用perl写程序时,是如何做错误处理的? 我使用的一个方法是子程序返回错
> 误代码,然后在头文件中建立错误代码和错误消息的hash表。但是,我自己觉得这
> 个方法不够smart, 诸位有没有什么其他办法呢?
>

我的程序是直接在出错的地方 die 而不是返回错误代码。其中一个好处是利用
die 函数的特性直接报告哪行那个文件出错 (如果是 apache 的话,错误信息就直
接写在 log 文件里,方便跟踪错误),另一个好处是在出错的地方直接返回错误
信息,而错误代码不够直观。

具体的使用大概如下:

简单的程序直接 die "错误信息";

稍大型,复杂的程序的话就写一个 config 文件来储存错误信息, 然后直接在出错
的地方 die MyErrorConfig->msg("Password_File_Not_Found"); 如果想处理这些
错误而不是让用户看到具体的错误信息,eval { sub_where_it_dies() }; if( $@
) { #返回一般性错误提示 }

另外,mastering perl 的第十二章对错误信息的生成和报告进行了讨论。

暂时想到的就这些了。

Qiang












--
和你在一起





--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
 要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
 要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
 更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛

-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: 错误处理

学习了,谢谢!

2009/8/7 smallfish <smallfish.xy@gmail.com>
同理,偶也喜欢die。
--
blog: http://hi.baidu.com/smallfish_xy


2009/8/7 Qiang (James) <shijialee@gmail.com>

yi wang wrote:
> 诸位,请教大家一个开放问题
> 诸位在用perl写程序时,是如何做错误处理的? 我使用的一个方法是子程序返回错
> 误代码,然后在头文件中建立错误代码和错误消息的hash表。但是,我自己觉得这
> 个方法不够smart, 诸位有没有什么其他办法呢?
>

我的程序是直接在出错的地方 die 而不是返回错误代码。其中一个好处是利用
die 函数的特性直接报告哪行那个文件出错 (如果是 apache 的话,错误信息就直
接写在 log 文件里,方便跟踪错误),另一个好处是在出错的地方直接返回错误
信息,而错误代码不够直观。

具体的使用大概如下:

简单的程序直接 die "错误信息";

稍大型,复杂的程序的话就写一个 config 文件来储存错误信息, 然后直接在出错
的地方 die MyErrorConfig->msg("Password_File_Not_Found"); 如果想处理这些
错误而不是让用户看到具体的错误信息,eval { sub_where_it_dies() }; if( $@
) { #返回一般性错误提示 }

另外,mastering perl 的第十二章对错误信息的生成和报告进行了讨论。

暂时想到的就这些了。

Qiang












--
和你在一起

--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
 要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
 要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
 更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛

-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: 错误处理

同理,偶也喜欢die。
--
blog: http://hi.baidu.com/smallfish_xy


2009/8/7 Qiang (James) <shijialee@gmail.com>
yi wang wrote:
> 诸位,请教大家一个开放问题
> 诸位在用perl写程序时,是如何做错误处理的? 我使用的一个方法是子程序返回错
> 误代码,然后在头文件中建立错误代码和错误消息的hash表。但是,我自己觉得这
> 个方法不够smart, 诸位有没有什么其他办法呢?
>

我的程序是直接在出错的地方 die 而不是返回错误代码。其中一个好处是利用
die 函数的特性直接报告哪行那个文件出错 (如果是 apache 的话,错误信息就直
接写在 log 文件里,方便跟踪错误),另一个好处是在出错的地方直接返回错误
信息,而错误代码不够直观。

具体的使用大概如下:

简单的程序直接 die "错误信息";

稍大型,复杂的程序的话就写一个 config 文件来储存错误信息, 然后直接在出错
的地方 die MyErrorConfig->msg("Password_File_Not_Found"); 如果想处理这些
错误而不是让用户看到具体的错误信息,eval { sub_where_it_dies() }; if( $@
) { #返回一般性错误提示 }

另外,mastering perl 的第十二章对错误信息的生成和报告进行了讨论。

暂时想到的就这些了。

Qiang








--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
 要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
 要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
 更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛

-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: 错误处理

yi wang wrote:
> 诸位,请教大家一个开放问题
> 诸位在用perl写程序时,是如何做错误处理的? 我使用的一个方法是子程序返回错
> 误代码,然后在头文件中建立错误代码和错误消息的hash表。但是,我自己觉得这
> 个方法不够smart, 诸位有没有什么其他办法呢?
>

我的程序是直接在出错的地方 die 而不是返回错误代码。其中一个好处是利用
die 函数的特性直接报告哪行那个文件出错 (如果是 apache 的话,错误信息就直
接写在 log 文件里,方便跟踪错误),另一个好处是在出错的地方直接返回错误
信息,而错误代码不够直观。

具体的使用大概如下:

简单的程序直接 die "错误信息";

稍大型,复杂的程序的话就写一个 config 文件来储存错误信息, 然后直接在出错
的地方 die MyErrorConfig->msg("Password_File_Not_Found"); 如果想处理这些
错误而不是让用户看到具体的错误信息,eval { sub_where_it_dies() }; if( $@
) { #返回一般性错误提示 }

另外,mastering perl 的第十二章对错误信息的生成和报告进行了讨论。

暂时想到的就这些了。

Qiang

--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: 错误处理

2009/8/7 yi wang <wangyi2412@gmail.com>
诸位,请教大家一个开放问题
诸位在用perl写程序时,是如何做错误处理的? 我使用的一个方法是子程序返回错误代码,然后在头文件中建立错误代码和错误消息的hash表。但是,我自己觉得这个方法不够smart, 诸位有没有什么其他办法呢?

我的印象中,常见的一般有以下两种:

1. 函数返回 undef 或者空列表等假值,然后由调用者自己检查 errcode 和 errstr,一个实例是 Memcached::libmemcached,GD.pm. 在 LWP::UserAgent 中是返回一个 HTTP::Response 对象,其中包含了是否成功的状态位,故也是类似的。这里的 errstr 也常被置到变量 $@ 中。
2. 函数出错时直接抛出异常(即在内部直接 die 掉,或者 croak 掉),然后由调用者捕捉异常,比如 DBI 在 RaiseError 选项启用时的行为便是如此。这里亦可同时提供 errcode(errstr 可以直接在 die 信息里了,即 $@ 中,呵呵)。

方法 1 很 C 风格,而方法 2 则比较 Java 风格。一般法 2 会比较自由一些,因为可以从很深的出错位置抛出异常到很高的层面上,而不必自己一级一级地返回 undef 之类的,呵呵。从许多常用的 CPAN 模块的 API 来看,方法 1 更常见一些,而方法 2 多用于一些意料之外的"真正的异常",呵呵。

Cheers,
-agentzh


--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
 要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
 要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
 更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛

-~----------~----~----~----~------~----~------~--~---

[PerlChina] 错误处理

诸位,请教大家一个开放问题
诸位在用perl写程序时,是如何做错误处理的? 我使用的一个方法是子程序返回错误代码,然后在头文件中建立错误代码和错误消息的hash表。但是,我自己觉得这个方法不够smart, 诸位有没有什么其他办法呢?


--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
 要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
 要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
 更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛

-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: 哪本书有详细讲perl fork的?谢谢

在unix 环境基本一样

On 8月5日, 下午7时53分, xjdengz <xjde...@gmail.com> wrote:
> 2009/8/5 liseen <liseen....@gmail.com>:> 如果你想要比较深刻地理解fork的话, 也许应该看看unix 高级编程。
>
> 是的, stevens的书讲的很清楚。不过perl的fork和这个一样吗?
>
>
>
> > 2009/8/4 Ericzhao82 <ericzha...@gmail.com>
>
> >> 多谢两位
>
> >> 2009/8/3 Lin <i...@lxl.cn>
>
> >>> 我这有一个比较实用的例子...
>
> >>> #!/usr/bin/perl
> >>> # achech.com
> >>> my $PID = $$;
> >>> my $THREAD = $$;
> >>> my $COUNT = 0;
> >>> my $CONNECT = 10;
> >>> my @kids = ();
> >>> my $parentpid = 0;
> >>> ##########
> >>> &Init();
> >>> &Forker($CONNECT);
> >>> while (1) {
> >>> $COUNT++;
> >>> if ($parentpid) {
> >>> &Running();
> >>> }
> >>> else {
> >>> &Reaper();
> >>> }
> >>> }
> >>> exit 0;
> >>> ##########
>
> >>> sub Init {
> >>> &debug(__LINE__,"Init...");
> >>> # 将需要重用的信息在这里初始化吧...
> >>> }
>
> >>> sub Forker {
> >>> my $clients = shift;
> >>> my $i = 0;
> >>> while ( $i++ < $clients ) {
> >>> my $newpid = fork();
> >>> if ( !defined $newpid ) {
> >>> die "fork() error: $!\n";
> >>> }
> >>> elsif ( $newpid == 0 ) {
> >>> $parentpid = $THREAD;
> >>> $THREAD = $$;
> >>> @kids = ();
> >>> last;
> >>> }
> >>> else {
> >>> &debug(__LINE__,"*进程 $$ 创建线程 $newpid");
> >>> push( @kids, $newpid );
> >>> }
> >>> }
> >>> }
>
> >>> sub Running {
> >>> &debug(__LINE__," +线程 $$ 等待接收");
> >>> # 在这里执行任务...
> >>> my $sec = int(rand(10));
> >>> &debug(__LINE__," TODO: 随机停顿 $sec 秒");
> >>> sleep($sec);
> >>> # 任务结束...
> >>> &debug(__LINE__," +线程 $$ 处理完毕");
> >>> }
>
> >>> sub Reaper {
> >>> while ( my $kid = shift(@kids) ) {
> >>> &debug(__LINE__,"*进程 $$ 回收线程 $kid");
> >>> my $reaped = waitpid( $kid, 0 );
> >>> unless ( $reaped == $kid ) {
> >>> &debug(__LINE__,"waitpid $reaped: $?");
> >>> }
> >>> }
> >>> }
>
> >>> sub debug{
> >>> printf("[%04d] %s %s\n",shift,scalar(localtime(time)),shift);
> >>> }
>
> >> --
> >> ................................................
> >> Ericzhao
>
> >> Email: Ericzha...@gmail.com
> >> MSN: Ericzhao...@hotmail.com
> >> BLOG: share82.freebsder.info
--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---

2009年8月5日星期三

[PerlChina] Re: 哪本书有详细讲perl fork的?谢谢

2009/8/5 liseen <liseen.wan@gmail.com>:
> 如果你想要比较深刻地理解fork的话, 也许应该看看unix 高级编程。
是的, stevens的书讲的很清楚。不过perl的fork和这个一样吗?
> 2009/8/4 Ericzhao82 <ericzhao82@gmail.com>
>>
>> 多谢两位
>>
>> 2009/8/3 Lin <i@lxl.cn>
>>>
>>> 我这有一个比较实用的例子...
>>>
>>> #!/usr/bin/perl
>>> # achech.com
>>> my $PID       = $$;
>>> my $THREAD    = $$;
>>> my $COUNT     = 0;
>>> my $CONNECT   = 10;
>>> my @kids      = ();
>>> my $parentpid = 0;
>>> ##########
>>> &Init();
>>> &Forker($CONNECT);
>>> while (1) {
>>>     $COUNT++;
>>>     if ($parentpid) {
>>>         &Running();
>>>     }
>>>     else {
>>>         &Reaper();
>>>     }
>>> }
>>> exit 0;
>>> ##########
>>>
>>> sub Init {
>>>     &debug(__LINE__,"Init...");
>>>     # 将需要重用的信息在这里初始化吧...
>>> }
>>>
>>> sub Forker {
>>>     my $clients = shift;
>>>     my $i       = 0;
>>>     while ( $i++ < $clients ) {
>>>         my $newpid = fork();
>>>         if ( !defined $newpid ) {
>>>             die "fork() error: $!\n";
>>>         }
>>>         elsif ( $newpid == 0 ) {
>>>             $parentpid = $THREAD;
>>>             $THREAD    = $$;
>>>             @kids      = ();
>>>             last;
>>>         }
>>>         else {
>>>             &debug(__LINE__,"*进程 $$ 创建线程 $newpid");
>>>             push( @kids, $newpid );
>>>         }
>>>     }
>>> }
>>>
>>> sub Running {
>>>     &debug(__LINE__,"  +线程 $$ 等待接收");
>>>     # 在这里执行任务...
>>>     my $sec = int(rand(10));
>>>     &debug(__LINE__,"    TODO: 随机停顿 $sec 秒");
>>>     sleep($sec);
>>>     # 任务结束...
>>>     &debug(__LINE__,"  +线程 $$ 处理完毕");
>>> }
>>>
>>> sub Reaper {
>>>     while ( my $kid = shift(@kids) ) {
>>>         &debug(__LINE__,"*进程 $$ 回收线程 $kid");
>>>         my $reaped = waitpid( $kid, 0 );
>>>         unless ( $reaped == $kid ) {
>>>             &debug(__LINE__,"waitpid $reaped: $?");
>>>         }
>>>     }
>>> }
>>>
>>> sub debug{
>>>     printf("[%04d] %s %s\n",shift,scalar(localtime(time)),shift);
>>> }
>>>
>>
>>
>>
>> --
>> …………………………………………
>>               Ericzhao
>>
>> Email:   Ericzhao82@gmail.com
>> MSN:    Ericzhao_82@hotmail.com
>> BLOG:   share82.freebsder.info
>>
>>
>
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛
-~----------~----~----~----~------~----~------~--~---

[PerlChina] Re: 哪本书有详细讲perl fork的?谢谢

如果你想要比较深刻地理解fork的话, 也许应该看看unix 高级编程。

2009/8/4 Ericzhao82 <ericzhao82@gmail.com>
多谢两位

2009/8/3 Lin <i@lxl.cn>

我这有一个比较实用的例子...
 
#!/usr/bin/perl
# achech.com
my $PID       = $$;
my $THREAD    = $$;
my $COUNT     = 0;
my $CONNECT   = 10;
my @kids      = ();
my $parentpid = 0;
##########
&Init();
&Forker($CONNECT);
while (1) {
    $COUNT++;
    if ($parentpid) {
        &Running();
    }
    else {
        &Reaper();
    }
}
exit 0;
##########

sub Init {
    &debug(__LINE__,"Init...");
    # 将需要重用的信息在这里初始化吧...
}

sub Forker {
    my $clients = shift;
    my $i       = 0;
    while ( $i++ < $clients ) {
        my $newpid = fork();
        if ( !defined $newpid ) {
            die "fork() error: $!\n";
        }
        elsif ( $newpid == 0 ) {
            $parentpid = $THREAD;
            $THREAD    = $$;
            @kids      = ();
            last;
        }
        else {
            &debug(__LINE__,"*进程 $$ 创建线程 $newpid");
            push( @kids, $newpid );
        }
    }
}

sub Running {
    &debug(__LINE__,"  +线程 $$ 等待接收");
    # 在这里执行任务...
    my $sec = int(rand(10));
    &debug(__LINE__,"    TODO: 随机停顿 $sec 秒");
    sleep($sec);
    # 任务结束...
    &debug(__LINE__,"  +线程 $$ 处理完毕");
}

sub Reaper {
    while ( my $kid = shift(@kids) ) {
        &debug(__LINE__,"*进程 $$ 回收线程 $kid");
        my $reaped = waitpid( $kid, 0 );
        unless ( $reaped == $kid ) {
            &debug(__LINE__,"waitpid $reaped: $?");
        }
    }
}

sub debug{
    printf("[%04d] %s %s\n",shift,scalar(localtime(time)),shift);
}






--
…………………………………………
              Ericzhao

Email:   Ericzhao82@gmail.com
MSN:    Ericzhao_82@hotmail.com
BLOG:   share82.freebsder.info





--~--~---------~--~----~------------~-------~--~----~
您收到此信息是由于您订阅了 Google 论坛"PerlChina Mongers 讨论组"论坛。
 要在此论坛发帖,请发电子邮件到 perlchina@googlegroups.com
 要退订此论坛,请发邮件至 perlchina+unsubscribe@googlegroups.com
 更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛

-~----------~----~----~----~------~----~------~--~---