zoukankan      html  css  js  c++  java
  • 第一章 输入/输出知识

    1.3 标准文件句柄:
    
    243[oracle@oadb 1]$ cat data.txt 
    234
    [oracle@oadb 1]$ cat muncher.pl 
    while (<STDIN>){
      print $_ + 9;
    };
    [oracle@oadb 1]$ cat data.txt 
    234
    [oracle@oadb 1]$ perl muncher.pl  <data.txt >a.txt
    [oracle@oadb 1]$ cat a.txt 
    243[oracle@oadb 1]$ 
    
    1.3.2 输入和输出操作:
    
    [oracle@oadb 1]$ cat a2.pl 
    open (A,"aa");
    $line=<A>;
    print $line."
    ";
    [oracle@oadb 1]$ perl a2.pl 
    1234567
    
    [oracle@oadb 1]$ cat a3.pl 
    open (A,"aa");
    @line=<A>;
    print @line;
    [oracle@oadb 1]$ perl a3.pl 
    1234567
    abcdefg
    
    [oracle@oadb 1]$ cat bb
    9999999999
    8888888888
    [oracle@oadb 1]$ perl a4.pl  aa bb
    $_ is 1234567
    
    $_ is abcdefg
    
    $_ is 9999999999
    
    $_ is 8888888888
    
    
    
    $bytes=read(FILEHANDLE,$buffer,$length [,$offset])
    
    $bytes=sysread(FILEHANDLE,$buffer,$length  [,$offset])
    
    [oracle@oadb 1]$ perl a5.pl
    1234567890
    $bytes is 7
    $buffer is 1234567
    [oracle@oadb 1]$ cat a5.pl 
    my $buffer;
    $bytes=read(STDIN,$buffer,7);
    print "$bytes is $bytes
    ";
    print "$buffer is $buffer
    ";
    [oracle@oadb 1]$ 
    
    默认时,所读取的数据将被放在$buffer的开始部分,覆盖$buffer中原有的内容。
    
    可以通过可选的数值型参数$offset来改变函数的这种行为,指定所读物的数据写入可选的被指定的开始位置。
    
    [oracle@oadb 1]$ cat a5.pl 
    my $buffer="1234567";
    $bytes=read(STDIN,$buffer,5,3);
    print "$bytes is $bytes
    ";
    print "$buffer is $buffer
    ";
    [oracle@oadb 1]$ perl a5.pl 
    abcdefg1234567
    $bytes is 5
    $buffer is 123abcde
    
    read()和sysread()的区别:
    
    read()读取所需的实际字节数或读到文件尾才返回
    
    sysread()函数会返回部分数据
    
    [oracle@oadb 1]$ cat a5.pl 
    my $buffer="1234567";
    $bytes=read(STDIN,$buffer,30,3);
    print "$bytes is $bytes
    ";
    print "$buffer is $buffer
    ";
    [oracle@oadb 1]$ perl a5.pl 
    abcdefg
    
    此时不返回数据
    
    
    [oracle@oadb 1]$ cat a5.pl 
    my $buffer="1234567";
    $bytes=sysread(STDIN,$buffer,30,3);
    print "$bytes is $bytes
    ";
    print "$buffer is $buffer
    ";
    [oracle@oadb 1]$ perl a5.pl 
    abcdefg
    $bytes is 8
    $buffer is 123abcdefg
    
    [oracle@oadb 1]$ 
    
    
    $bytes=syswrite(FILEHANDLE,$data [,$length [,$offset]]);
    
    1.3.3 检测文件尾
    
    
    
    1.3.4 行尾之处的混乱:
    
    在UNIX 系统上,行以换行符(LF 
    )结尾
    
    Windows 上是
    
    
    
    1.3.5 打开和关闭文件:
    
    [oracle@oadb 1]$ cat a7.pl 
    open (FH,">message.txt") or die $!;
    print FH "this is the first line.
    ";
    print FH "And this is the second line.
    ";
    
    1.3.6 缓冲和堵塞
    
    
    1.4 使用IO::Handle模块和IO::File模块的面向对象语法:
    
    
    
    在本书的后面我们会使用perl5 的面向对象的扩展功能,尽管你不需要知道太多创建面向对象模块的知识,
    
    但你需要基本理解如何使用面向对象模块和它们的语法。
    
    1.4.1 对象和引用:
    
    [oracle@oadb 1]$ cat a1.pl 
    my @array=(1,4,7,2,5,8);
    my $array=@array;
    print "----------------
    ";
    print $array;
    print "
    ";
    print "----------------
    ";
    print $array->[2];
    print "
    ";
    print $$array[3];
    print "
    ";
    
    [oracle@oadb 1]$ perl a1.pl 
    ----------------
    ARRAY(0x9d95b8)
    ----------------
    7
    2
    
    
    对象(object)也是一个引用,只不过具有一些额外的位。
    
    对象带有"是什么模块创建它"的相关信息,它以这种方式被"神圣化"(blessed)而居于特定模块的软件包中。
    
    $object->print_record();##调用print_record()方法
    
    你可能有时会看到一个方法被调用时具有参数,像下面这样:
    
    负责将一般引用转化为"神圣化"的引用的函数自然被称为bless()
    
    $object->{last_name};
    
    使用对象不同于一般引用的是它们具有方法(method),方法调用使用->符号,但后面紧跟着一个子例程名和可选的子例程的子例程风格的参数:
    
    
    $object->print_record();##invoke the print_record() 方法
    
    你可能有时看到一个方法被调用时具有参数,像下面这样:
    
    
    $object->print_record(encoding=>'EBCDID');
    
    [oracle@oadb 1]$ cat BigDatabase.pm 
    package BigDatabase;
    our $VERSION="2.0";
    sub new{
       my $class=shift;
       my %p=@_;
       my $self={
        version => $VERSION,
        debug => $p{debug}
    };
       bless $self,$class;
       return $self;
    };
    
    
    sub print_record{
       my $self=shift;
       my %p=@_;
       my $var=$p{data};
       return $self->{debug} + $var;
    };
    1;
    
    [oracle@oadb 1]$ cat a2.pl 
    use BigDatabase;
    my $object=BigDatabase->new(debug=>890);
    print $object->print_record(data=>56);
    print "
    ";
    print "------------------------------
    ";
    print BigDatabase::print_record($object);
    print "------------------------------
    ";
    [oracle@oadb 1]$ perl a2.pl 
    946
    ------------------------------
    890------------------------------
    
    
    为了创建对象,必须调用它的一个构造函数(constructor)。构造函数是一个从模块名调用的方法调用,
    
    例如,创建一个新的BigDatabase对象,代码如下:
    
    
    $object=BigDatabase->new(); ##call the new() 构造器
    
    构造函数是一个类方法(class method)的特例,经常被命名为new(). 然而,任意的子例程名都是可能的,
    
    1.4.2 IO::Handle模块和IO::File模块
    


    
                                        
    
  • 相关阅读:
    详解git pull和git fetch的区别
    什么是移臂调度,什么是旋转调度?
    常用的资源分配策略有哪两种?在每一种策略中,资源请求队列的排序原则是什么?
    什么是虚拟资源,对主存储器而言,用户使用的虚拟资源是什么?
    进程调度的任务是什么,线程调度的任务是什么?
    用于进程控制的原语主要由哪几个,每个原语的执行将使进程的状态发生什么变化?
    试说明进程创建的主要功能是什么?
    什么是线程,线程与进程有什么区别?
    什么是进程互斥,什么是进程同步,同步和互斥这两个概念有什么联系和区别?
    n个并发进程共用一个公共变量Q,写出用信号灯实现n个进程互斥的程序描述,给出信号灯值得取值范围,并说明每个取值范围的物理意义。
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13349790.html
Copyright © 2011-2022 走看看