Chinaunix

标题: 请教两个问题 [打印本页]

作者: bandaotidejia    时间: 2014-11-10 11:09
标题: 请教两个问题
本帖最后由 bandaotidejia 于 2014-11-10 11:23 编辑

之前做c开发,现在做perl发现很多理解起来有点费解,请前辈指教

1 perl的hash表 %xxx 和c的hash是不是不一样,hash本来是将字符串映射为一个地址,但是perl好像都是指定一个数字 比如:
%abc= (
        name => 3,
        medium => 1,
        large => 2,

);


对于下面的代码,keys是perl内置的变量吗?
  @sts = keys %abc;
  foreach $dkey (@sts)
  {
    print dout1 "$dkey;\n";//这个是打印出所有的key值吗?
  }

如果打印多少value是不是得这样:
  @sts = values %abc;
  foreach $dkey (@sts)
  {
    print dout1 "$dkey;\n";
  }
2 $$ 表示变量的变量,是不是和c里面地址的地址类似,好像还不一样

比如$$abc{"Name"};是什么意思啊?

作者: zhlong8    时间: 2014-11-10 11:43
我觉得 Perl 是动态类型的 C+shell +sed/awk

hash 把字符串映射为一个 scalar,scalar 包括了数字、字符串、引用。

keys values 是处理 hash 的关键字/内置函数。

引用是安全的指针,它没法做数学运算,只能通过取了一个值的引用来创建,不存在空引用。

C中 *a 是取指针a的值,Perl 中 $$a  是取引用 $a 指向的 scalar, %$a 是取 $a 指向的 hash ,解引用时需要根据类型选择是 $$a 还是 @$a 还是 %$a 。这不科学,没必要指明类型($%@)才对,但 Perl 的语法决定了它需要这样设计。

单独的 $$ 和shell 中一样表示当前进程的PID。Perl 的变量的名字可以是单个符号,比如 $$ $! $@ @- %- 怎么同 $$a 区分这个靠语法。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2