Perl 小骆驼书中下面的这个例子, 作用是怎样的?foreach循环里匹配的是什么内容?

#!/usr/bin/perl-w@lines=system'perldoc-u-fatan2';foreach(@lines){s/\w<([^>]+)>/\U$1/g... #! /usr/bin/perl -w
@lines = system 'perldoc -u -f atan2';
foreach (@lines){
s/\w<([^>]+)>/\U$1/g;
print;
}
展开
 我来答
lreper
推荐于2016-12-02 · TA获得超过413个赞
知道小有建树答主
回答量:243
采纳率:100%
帮助的人:292万
展开全部
perldoc -u -f atan2
是perldoc 命令行 ,可以得到 perl 中atan2 函数的说明
system 是在perl 中调用这个命令行,反引号也可以实现同样的功能
然后把得到的内容放到数组

然后 正则替换内容, \w 代表一个数字、字母或下划线
匹配 以一个\w 开头,被<>括起来的内容 ,后面的 $1 代表的是前面括号括起来的内容,\U 代表大写,g代表 全部替换;

就是 像 X<atan2> 会被替换为 ATAN2
更多追问追答
追问
谢谢。
请问 [^>]+ 匹配到的是什么内容?
追答
中括号中的是字符集
[>] 代表字符 > , [^>] 代表除 > 的所有字符
+ 代表之前的字符有一个或多个

所以,[^>]+ 匹配的就是 一个或多个非>字符
daniel_627
2012-08-15 · TA获得超过122个赞
知道答主
回答量:40
采纳率:0%
帮助的人:31.6万
展开全部
第一行是#!这一行,#!行和程序的可移植性相关,需要找到每台机器的存放地点。幸运的是,通常都被放在/usr/bin/perl 或/usr/local/bin/perl 中。

第二行运行了一个外部命令,由` `括起来了。(反引号` 通常在美式键盘数字1 的左边。不要和单引号‘混淆了。)我们用的命令的是perldoc –u –f atan2;在命令行输入这个命令,看看能得到什么结果。perldoc 这个命令能在大多数机器中使用,它显示相关的文档。◆这个命令告诉你一些关于反正切函数atan2 的信息;在这里我们把它做为一个外部命令,并处理它
的输出信息。
反引号内的命令的输出被保存在@lines 中。下一行是一个循环,它依行处理@lines 中的信息。循环内语句是缩进的。虽然Perl 并不需要这样,当这是好的编程习惯。

循环内的第一行让人惊慌;它是s//w<([^>]+)>//U$1/g;这里不过多的讨论细节,我们只提示下,它能改变有特殊标记(<>)的行,在每一perldoc 这个命令的输出中,都至少有一行具有这样的形式。
下一行,令人惊奇的是,它输出每一行(可能是修改过的)。输出的结果和perldoc –u –f atan2 类似,但标记(<>)内的内容有些不同。

正则替换内容, \w 代表一个数字、字母或下划线
匹配 以一个\w 开头,被<>括起来的内容 ,后面的 $1 代表的是前面括号括起来的内容,\U 代表大写,g代表 全部替换;

总结下,通过这几行程序,我们运行了另一个程序,把它的输出保存在内存中,修改内存中的数据,再把结果输出来。这种把数据从一种形式转换成另一种形式的程序在Perl 中很常见。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式