LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: KornLee

有关Perl问题的讨论请到这里

[复制链接]
发表于 2003-9-21 23:42:20 | 显示全部楼层

perl中的引用运算符

#!/usr/bin/perl
print "please enter a letter:";
$letter = <STDIN>;
chop $letter;
$letter = (qq($letter)ge"A"&&qq($letter)le"Z")?$letter = "Error!"letter;
print "$letter";

哪位perl高手能不能帮我解答一下这个是什么意思,多谢了,
$letter = (qq($letter)ge"A"&&qq($letter)le"Z")?$letter = "Error!"letter;

还有关于这些引用运算符是干嘛的,像q,qq,qx,qw等,用法是怎么样的,多谢了,
 楼主| 发表于 2003-9-22 00:09:02 | 显示全部楼层
  1. 结构          结果(相当于)   是否插值         代表
  2. q/str/        'str'          no               文字串
  3. qq/str  /     "str"          yes              文字串
  4. qx/命令/      `命令`         yes              命令
  5. qw/str  /     (str)          no               单词列表
  6. /str/         m/string/      yes              模式匹配
  7. s/str1/str2/                 yes              模式替换
  8. y/str1/str2/                 no               模式翻译
复制代码
其中,像qw,qq之类的结构的定界符号可以是任意的,

qw/..../
qw{....}
qw|....|
qw#....#
qw<....>
.....
我不知道你看的什么书?!,,,;) 不过好像比较旧了些 ;),,,,我给你改一下你就很明白啦~~~
  1. #!perl -w
  2. print "please enter a letter:";
  3. $letter=<>;
  4. if ($letter ge A && $letter le Z) {
  5.         print $letter;
  6. } else {
  7.         print "Error!";
  8. }
复制代码
另外,你的那句比较代码的实际上好像用了三元运算的方法---?:
发表于 2003-9-22 00:20:19 | 显示全部楼层
多谢版主了,那表达式明白的,是三态运算符,好象比if...else要简洁一些哦,就是不明白那个引用运算符的,现在明白了,多谢版主了,

##那本书旧##:ask :ask

好象不吧,是01年版的哦,清华大学出的那本perl5,“法国总统”戴高乐等编的,:p :p :p :p :p

够牛了吧,嘿嘿~~~~~~

三态运算符
(条件表达式)?条件真表达式:条件假表达式;

条件表达式为真时执行条件真表达式,条件表达式为假时执行条件假表达式
 楼主| 发表于 2003-9-22 00:31:56 | 显示全部楼层
你的"戴高乐"当然太"老"啦~~~,
我的<<perl入门>>:2002,8
<<erl Black Book>>:2003,1
发表于 2003-9-24 21:50:52 | 显示全部楼层

请教

quato
----------------------------------------------------------------------------------
Perl 的正则表达式中如果出现 () ,则发生匹配或替换后 () 内的模式被 Perl 解释器自动依次赋给系统 $1, $2 ...... 请看下面的例子:


$string = "I love perl";
$string =~ s/(love)/<$1>/; # 此时 $1 = "love",并且该替换的结果是将 $string 变为 "I <love> perl"
$string = "i love perl";
$string =~ s/(i)(.*)(perl)/<$3>$2<$1>/; # 这里 $1 = "i",$2 = " love ",$3 = "perl",并且替换后 $string 变为 "<perl> love <i>"

--------------------------------------------------------------------------------

请问倒数第二行 (.*) 代表什么?
 楼主| 发表于 2003-9-25 11:04:23 | 显示全部楼层
实际上perl把string中第一个模式(i)和第三个模式(perl)分别赋予$1,$3,中间零个或多个字符串被赋予$2,即在模式(perl)之前到模式(i)之间的所有字符串都被赋予了$2.在perl中,(.*)是作为一个量词,那个*具有"贪婪性"...
这是我的理解,;)望指点! :thank
发表于 2003-9-27 00:43:30 | 显示全部楼层
http://www.yuzi.net/perl5/
这个站点不错,
发表于 2003-9-27 14:18:33 | 显示全部楼层
怎么用chop ,chomp  命令是一样的结果,它们有什么区别?
 楼主| 发表于 2003-9-27 14:42:02 | 显示全部楼层
最初由 devel 发表
怎么用chop ,chomp  命令是一样的结果,它们有什么区别?
chomp是chop的安全版本:他除去的字符与变量$?的当前值相对应,这个变量是perl中存放输入记录分隔符的特殊变量,他默认的值就是换行符.他返回去除的字符总数,而他通常用于去除一条记录末端的换行符,如果省略了变量,chomp则处理默认的变量$_.
上述说明引用自<<erl Black Book>>
他们的使用方法基本一样,区别基本不大,都是去掉换行符.
发表于 2003-9-27 22:07:10 | 显示全部楼层
# perl p1
4,3,3
# cat p1
#!/usr/bin/perl5
$a=2;
$b=++$a;
$c=$a++;
printf " $a,$b,$c\n";
#
:ask :ask
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表