• 简单高效读写修改整个文本Slurp


    语法:

    use File::Slurp;

    #标量环境下一次读取所有文本内容到标量中。

    my $text = read_file( 'filename' ) ;

    #  读取文本的所有行到数组中。

    my @lines = read_file( 'filename' ) ;

    #将一个标量写入到文件中。

    write_file( 'filename', $text ) ;

    #将数组写入一个文件中。

    write_file( 'filename', @lines ) ;

    #读取和存储简单的配置文件

    # made of key=value lines. 
    'my %conf = read_file( $file_name ) =~ /^(w+)=(.*)$/mg ; 
    write_file( $file_name, {atomic => 1}, map "$_=$conf{$_}
    ", keys %conf ) ;

    # 文本开始处插入文本

    prepend_file( 'filename', $text ) ;

    # 替换文本中所有的‘foo'为'bar’

    edit_file { s/foo/bar/g } 'filename' ;

    # 删除文件中所有包含‘foo'的行

    edit_file_lines sub { $_ = '' if /foo/ }, 'filename' ;

    #读取整个目录(越过. and ..)

    my @files = read_dir( '/path/to/dir' ) ;

    read_file

      my $text = read_file( 'filename' ) ;
      my $bin = read_file( 'filename' { binmode => ':raw' } ) ;
      my @lines = read_file( 'filename' ) ;
      my $lines = read_file( 'filename', array_ref => 1 ) ;

    binmode

    你能设置这个参数作为binmode,utf8等模式

    my $bin_data = read_file( $bin_file, binmode => ':raw' ) ;
    my $utf_text = read_file( $bin_file, binmode => ':utf8' ) ;

    array_ref

    如果此参数被设置,返回值将使数组的索引。下列两种方式是等同的。

    my $lines_ref = read_file( $bin_file, array_ref => 1 ) ;
    my $lines_ref = [ read_file( $bin_file ) ] ;

    chomp

    如果此参数被设置,行将被chomp,只有在列表环境或者数组索引环境下。

    write_file

    write_file( 'filename', @data ) ;
    write_file( 'filename', {append => 1 }, @data ) ; 
    write_file( 'filename', {binmode => ':raw'}, $buffer ) ;

    append

    如果设置此参数,数据将被追加到原文本后。

    append_file

    # 两种方式效果相同 都是追加文本到文件尾
    append_file( $file, @data ) ;
    write_file( $file, {append => 1}, @data ) ;

    prepend_file

    文本最开始插入文本

    use File::Slurp qw( prepend_file ) ;
    prepend_file( $file, $header ) ;
    prepend_file( $file, @lines ) ;
    prepend_file( $file, { binmode => 'raw:'}, $bin_data ) ;

    edit_file

    use File::Slurp qw( :edit ) ;
    edit_file { s/foo/bar/g } 'filename' ;
    edit_file_lines sub { $_ = '' if /foo/ }, 'filename' ;

    read_dir

    返回给定目录下所有文件和文件夹的名,但是默认移除.和..

    my @files = read_dir( '/path/to/dir' ) ;

    keep_dot_dot

    如果该选项设置为真,.和..不被移除

    prefix

    如果该选项设置为真,文件夹和文件的将是全目录

    my @paths = read_dir( '/path/to/dir', prefix => 1 ) ;
  • 相关阅读:
    LeetCode-1370 Increasing Decreasing String
    LeetCode-1221 Split a String in Balanced Strings
    Neo4j 实战(三)-- Neo4j Loads CSV Files
    Neo4j 实战(二)-- neo4j 基础语句
    Java HashMap 学习笔记
    Markdown 入门笔记
    《知识图谱方法、实践与应用》读书笔记(第一遍)
    Java 数组复制
    LeetCode-496 Next Greater Element I Solution(with Java)
    linux 同步IO: sync、fsync与fdatasync
  • 原文地址:https://www.cnblogs.com/tjxwg/p/3321562.html
Copyright © 2020-2023  润新知