perl的键盘输入求解

以上这个perl小程序,是个怎么个运行法?主要想知道$plit是什么来的,后面的//,这2个斜杠什么意思?后面的$/m/y/g这个也不知道怎么个调用发的。请求帮忙... 以上这个perl小程序,是个怎么个运行法?主要想知道$plit是什么来的,后面的 / / ,这2个斜杠什么意思?后面的$/m/y/g这个也不知道怎么个调用发的。请求帮忙 展开
 我来答
百度网友c9e795dda
2014-04-23 · TA获得超过5167个赞
知道大有可为答主
回答量:1128
采纳率:0%
帮助的人:1137万
展开全部

在 perl 中, 本身独立 / / 两个斜杠里面的为正则表达式, regular expression, 又叫 regex. 作用就预设一个字串匹配的模式. 例如:

$re = qr/^\d$/; # 这正则的意思是, 由开始至结尾之间只有一个数字
for ( 0..99 ) {
    print "$_ match the pattern" if $_ =~ $re;
} # 最後你会发现, 0-9 都是 match 的, 但就不见了10 到 99, 因为有两个数字

split 的意思就是按你後面正则所设的模式, 将後面第二个参数 ( 即 $_ ) 进行切割, 在这里是 / /, 所以, 如果你输入一个句子 "my name is mike", 那这个 for 循环里就会处理到 "my" , "name", "is", 和 "mike" 这四个字


s/// 的作用是 perl 中对字串作出寻找并取代的涵数,

第一个 / / 之间是要找的模式,

第二个 / / 之间的是, 如果找到能匹配前面那种模式时, 要取代成的文字,

最後那个 g 的位置叫 modifier(不知道中文叫甚麼), 可以当作对前面第一节正则的追加功能, 这些 modifiers 有很多有 m s i x p o d u a l 这麼多个, 另外还有 e 和 g 是为 s/// 而设的, 这些 modifiers 都是可以用在一起的, 例如 i 是不分大小写, g 是贪婪匹配, s/xxx/yyy/ig 就是不分大小写的贪婪匹配


g, 所谓的贪婪匹配就是会将字串搜到尾的意思, 如果没有贪婪匹配的话, perl 在搜到第一个匹配时就会停止, 例如

$x = "123456";
$x =~ s/\d/_/;
print $x; # _23456

$x = "123456";
$x =~ s/\d/_/g;
print $x; # ______

这就是有 g 和没 g 的分别


最後回到你的问题上, 如果我输入的是 "my name is mike"

那麼, 最後得出的结果就会是 "yy naye is yike"

s/m/y/g 的意思就是, 将每个字从头到尾找出 m 字元, 再取代成 y 字元



追问
我的程序算明白了,可是你给我举得例子中我就有个不明白的地方了for 0..99这又是个什么意思呀?是0-99的意思吗?for语句不是for(?;?;?)的用法吗?这里是简化了的吗?然后你第一句,怎么就直接判断只要一位数字了?
追答
Q: for 0..99这又是个什么意思呀?是0-99的意思吗?
A: 对! 还可以有 ( 'a' .. 'z' ), 甚至可以 ( 0..5, 7, 10, 11..18, 'a' .. 'z' );
为甚麼你不自己试一下呢 ?

Q: for语句不是for(?;?;?)的用法吗?这里是简化了的吗?
A: 是;不是.

据 perldoc ( perl 自带的说明) 的介绍, for 可以写成
for (EXPR; EXPR; EXPR) BLOCK

for VAR (LIST) BLOCK
所以这是 Perl 的语法, 而不是因为简化, 只是 perl 也同样支持传统而广泛的 for (;;) 语法

Q: 然后你第一句,怎么就直接判断只要一位数字了?
A: 其实我要甚麼都可以,我只是举个例让你容易点明白而已
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式