zoukankan      html  css  js  c++  java
  • Perl 学习手札之十一:References and Data Structures

    a reference is a variable that refer to a value

     - as opposed to a variable that contains a value

    example.pl

    #!/usr/bin/perl
    #

    use strict;
    use warnings;

    main(@ARGV);

    sub main
    {
        my $var = "This is the Perl 5 references chapter.";
        my $ref = \$var;
        my $copy = $ref;
        message($$ref);
        $var = 42;
        message($$copy);
    }

    sub message
    {
        my $m = shift or return;
        print("$m\n");
    }

    sub error
    {
        my $e = shift || 'unknown error';
        print("$0: $e\n");
        exit 0;
    }

    variable contains value; reference point to value.


    arrayref.pl

    #!/usr/bin/perl
    #

    use strict;
    use warnings;

    main(@ARGV);

    sub main
    {
        my @list = ("This is the Perl 5 references chapter.",
        42,
        "another string",
        "one more value");
        my $var = \@list;
        message($var);
        my $copy = $var;
        message(join(':',@$var));
        message(join(':',@$copy));
        $copy->[2]=187;
        message(join(':',@$copy));
    }

    sub message
    {
        my $m = shift or return;
        print("$m\n");
    }

    sub error
    {
        my $e = shift || 'unknown error';
        print("$0: $e\n");
        exit 0;
    }

    这个例子包含了所有数组引用的内容:包括输出数组的内容,修改数组的元素值。我们可以将代码的部分写成一下的类型:

        my $var = ["This is the Perl 5 references chapter.",
        42,
        "another string",
        "one more value"];

    这样构造了一个事实上的匿名数组引用, 并且和上面的结果完全等效。

    hashref.pl

    #!/usr/bin/perl
    #

    use strict;
    use warnings;

    main(@ARGV);

    sub main
    {
        my $hashref = {
           "name"=>"jimi hendrix",
           instrument=>"guitar",
           album=>"are you experienced"
        };
        my $copy = $hashref;
        $copy->{songs}= "puplehaze";
        foreach my $k (sort keys %$copy){
            my $v = $copy->{$k};
            message("$k:$v");
        }

    }

    sub message
    {
        my $m = shift or return;
        print("$m\n");
    }

    sub error
    {
        my $e = shift || 'unknown error';
        print("$0: $e\n");
        exit 0;
    }

    同理,上面的例子也是用了所有的关于hash的引用模型和例子。我们还是用的匿名引用。例子同数组部分。

    mixed.pl

    #!/usr/bin/perl
    #

    use strict;
    use warnings;

    main(@ARGV);
        my $artists=[
           {
               name=>"jimi hendrix",
               instrument=>"guitar",
               genre=>"rock"
           },
           {
               name=>"miles davis",
               instrument=>"trumpet",
               genre=>"jazz"
           },
           {
               name=>"ella fitzgerald",
               instrument=>"vocal",
               genre=>"jazz"
           },
        ];
        push @$artists,{name=>"yoyo ma", instrument=>"cello",genre=>"classic"};
        foreach my $artist (@$artists){
            message("$artist->{name},$artist->{instrument},$artist->{genre}");
        }
    sub main
    {

        my $var = "This is the Perl 5 references chapter.";
        message($var);
    }

    sub message
    {
        my $m = shift or return;
        print("$m\n");
    }

    sub error
    {
        my $e = shift || 'unknown error';
        print("$0: $e\n");
        exit 0;
    }

    更多内容还是参考intermediate perl或者programming perl第三版。

  • 相关阅读:
    查找表包含的页和页所在的表
    一次死锁追踪经历
    SQL语句实现取消自增列属性
    如何修改SQL Server 2005服务器名称
    出身在二三线城市软件工作者的悲哀
    (转)Android 混淆器 ProGuard (一定程度防止反编译)
    《Java 并发编程实战》第一、二章阅读笔记
    在 Visual Studio 2010 中配置 OpenGL 开发环境
    《Java 学习笔记》 第七、八章阅读体验
    2012年上半年阅读书籍清单
  • 原文地址:https://www.cnblogs.com/hanleilei/p/2389524.html
Copyright © 2011-2022 走看看