文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | firefox | WPS | 杀毒软件 | Picasa
清风网络
首 页 软件下载 网络学院 数码学院
QQ 电脑入门 游戏 操作系统 图形图像 办公软件 媒体动画 精文荟萃 常用软件 网页编程 技术开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络学院网络编程CGI/Perlperl常问问题集--第六篇
精品推荐
特别推荐
·在CGI中如何使用cookie的方法
·CGI脚本在WIN2000、WINNT下安装
热点TOP10
·cgic: 为C语言编写CGI的C函数库
·Perl实例:
·在CGI中如何使用cookie的方法
·CGI 安全问题
·怎样一次打印多个文件
·CGI脚本在WIN2000、WINNT下安装
·CGI教程(4)HTML 表单
·cgilib例
·Perl教学 第十二篇 Perl5中的引用之二
·Perl教学 第十二篇 Perl5中的引用之一
·Perl/Tk FAQ - 4. 哪里有Perl/Tk?
·用Perl写出自己的安全工具--初级
·购建ASP、CGI、PHP+MySQL运行环境——服务器运行环境配置全攻略(二)
·跟我学Perl
·访问标准CGI变量
·关于我和刘思平发现的xx(www.xxxxxxx.com)的cgi漏洞
·关于Sendmail和Perl的邮件附件过滤系统
·关于odbc的一个文挡说明
·建立个人服务器脱机调试CGI脚本
·计数器的编写方法

perl常问问题集--第六篇

日期:2007年5月10日 作者: 查看:[大字体 中字体 小字体]


如何得知使用者正在哪个作业系统下执行我的 perl 程式?

$^O 这个变数(若使用 English 模组就是 $OSTYPE)会指出你的 perl 解译器执 行档是替哪个作业系统、平台所建的。


为什麽 exec() 不会传值回来?

因为这正是它所做的:它用另一个不同的程式来取代你当时所执行的。如果你的程 式需要继续跑下去(这可能正是你问此问题的原因吧?),改用system()


如何对 键盘/萤幕/滑鼠 做些花样?

连接/控制 键盘、萤幕和指标装置(「滑鼠」)的方法因作业系统的不同而有不 同;不妨试试下列模组:

键盘
 Term::Cap perl 标准内建模组
 Term::ReadKey CPAN
 Term::ReadLine::Gnu CPAN
 Term::ReadLine::Perl CPAN
 Term::Screen CPAN
萤幕
 Term::Cap perl 标准内建模组
 Curses CPAN
 Term::ANSIColor CPAN
滑鼠
 Tk CPAN

如何向使用者询问密码?

(这个问题跟全球资讯网一点关系也没有。如果你要找的是跟WWW 有关的,那就 看另一份常见问题集吧。)

【译注:中文版的 PerlCGI 程式设计常见问题集可以在下列网址中找到:http://www.math.ncu.edu.tw/~chenym/FAQ/Perl/perl-cgi-faq/

http://2tigers.net/perl/perl-cgi-faq-chi/ 】

在crypt 里面有个范例。首先,将你的终端机设为「无回应」[no echo] 模式,然後就用平常的方法将密码读入。你可以用老式的ioctl() 函数、POSIX 终端机控制函数(参看POSIX ,和 Camel 书第七章),或是呼叫stty 程式,这些方法的可携性/移植性程度都不一样。

你也可以在大部份系统上使用CPAN 里的 Term::ReadKey 模组,这个模组较易使 用而且理论上也较据可携性/移植性。


如何对序列埠做读写动作?

这端看你在什麽作业系统上执行你的程式。以 Unix 来说,序列埠可以透过 /dev 目录下的档案来撷取; 而在其他系统上,设备的名称无疑地会不一样。以下是一些 在设备互动时可能遭遇的共同问题:

锁档 (lockfiles)
你的系统可能会使用锁档来控制多重读写的情况。确定你用的是正确的协定。因为 当多个程序同时对一个装置做读取时可能会发生意想不到的情况。
开档模式
如果你打算对一个装置同时做读与写的动作,你得将它开到更新的模式( 在open 里有更详细的解说)。如果你不希望冒着阻挡其他程序读取 这个装置的风险,那就得用sysopen() 和 Fcntl 模组(标准 perl 的一部分)内 的O_RDWRO_NDELAYO_NOCTTY。在sysopen 里有对此方法更 详尽的解说。
档案尾
有些装置会等着在每行结尾处看到一个 ``\r'',而非 ``\n''。在某些平台上的 perl, ``\r''和 ``\n'' 与它们平常(在 Unix 上)所指的ASCII 值 ``\015'' 和 ``\012'' 有 所不同。你也许得直接给定数值,例如用八进位 (``\015'')、十六进位 (``0x0D''), 或指定控制字元 (``\cM'')。
 print DEV "atv1\012"; # 对某些装置来说是错误的
 print DEV "atv1\015"; # 对某些装置来说是对的

尽管对普通的文字档案,一个 ``\n'' 便可解决断行的问题,但目前在不同作业系统 间(Unix、DOS/Win 和 Macintosh),对於断行记号仍无统一标准,而只有用 ``\015\012'' 来当成每行的结尾,然後再视需要去掉输出中不想要的部份。这 个做法尤其常用於 socket输出/输入 与自动洗清 (autoflushing),也是接下来 要讨论的主题。

洗清输出
如果你希望print() 的时候每个字元都要送到你指定的装置去,那你应自动清洗 你的档案把手,旧方法是:
 use FileHandle;
 DEV->autoflush(1);

比较新的方法是:

 use IO::Handle;
 DEV->autoflush(1);

你可以用select()$ 变数来控制自动清洗的动作(参考$ 和select ):

 $oldh = select(DEV);
 $ = 1;
 select($oldh);

你也可能看到不使用额外的暂存变数的写法,例如:

 select((select(DEV), $ = 1)[0]);

如同前一个项目所说的,这方法对 Unix 和 Macintosh 间的 socket 输出/入 没 用。在这种情况下,你得把你的行末字元写死在程式码内。

不挡式输入 (non-blocking input)
如果你正在做一个具阻挡性的read()sysread() 动作,则你需要安排一个闹 铃把手或提供一个逾时设定(参看alarm)。如果你是用非阻挡式的 开档,那麽就要配合非阻挡性的读取,也就是说得用到4 个参数的select() 来确 定此装置的 输出/入 是否已准备好了(参考select )。

如何逆解加密後的密码档案?


[1] [2] [3] [4] [5] [6] 下一页 




上一篇:perl常问问题集--第七篇

下一篇:生根于自由的土壤-FastCGI之三

perl常问问题集--第六篇 相关文章:
·perl常问问题集--第六篇
perl常问问题集--第六篇 相关软件:

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.viphot.com
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.viphot.com All Rights Reserved. 鄂ICP备05000083号Powered by:vipcn