perl的键盘输入求解
在 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: 其实我要甚麼都可以,我只是举个例让你容易点明白而已