加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何删除Perl字符串中的空格?

发布时间:2020-12-15 21:12:22 所属栏目:大数据 来源:网络整理
导读:如果我声明一个值为’3’的变量$myString(注意空格). 是否有任何功能来删除返回值的空格. 有点像SomeFun($myString)然后返回’3′(没有空格). #!C:Perlbinperl.exeuse strict;use warnings;use Data::Dumper; my $fh = *DATA; print Dumper parse_consta
如果我声明一个值为’3’的变量$myString(注意空格).
是否有任何功能来删除返回值的空格.
有点像SomeFun($myString)然后返回’3′(没有空格).
#!C:Perlbinperl.exe
use strict;
use warnings;
use Data::Dumper; 

my $fh = *DATA; 

print Dumper parse_constant_spec( $fh ); 


# Parse a constant spec file. 
# Pass in a handle to process. 
# As long as it acts like a file handle,it will work. 
sub parse_constant_spec { 
    my $fh = shift; 

    my %spec; 

    # Until file is done: 
        # Read in a whole block 
    while( my $block = read_block($fh) ) { 

        # Parse the and return key/value pairs for a hash. 
        my %constant = parse_block( $block ); 

        # Store a ref to the hash in a big hash of all blocks,keyed by constant_name. 
        $spec{ $constant{const_name} } = %constant; 

    } 

    # Return ref to big hash with all block data 
    return %spec; 
} 

# Read a constant definition block from a file handle. 
# void return when there is no data left in the file. 
# Otherwise return an array ref containing lines to in the block.  
sub read_block { 
    my $fh = shift; 

    my @lines; 
    my $block_started = 0; 

    while( my $line = <$fh> ) { 

        $block_started++ if $line =~ /^constant/; 

        if( $block_started ) { 

            last if $line =~ /^s*$/; 

            push @lines,$line; 
        } 
    } 

    return @lines if @lines; 

    return; 
} 


sub parse_block { 
    my $block = shift; 
    my ($start_line,@attribs) = @$block; 

    my %constant; 

    # Break down first line: 
    # First separate assignment from option list. 
    my ($start_head,$start_tail) = split /=/,$start_line; 

    # work on option list 
    my @options = split /s+/,$start_head; 

    # Recover constant_name from options: 
    $constant{const_name} = pop @options; 
    $constant{options} = @options; 

    # Now we parse the value/type specifier 
    @constant{'type','value' } = parse_type_value_specifier( $start_tail ); 

    # Parse attribute lines. 
    # since we've already got multiple per line,get them all at once. 
    chomp @attribs; 
    my $attribs = join ' ',@attribs; 

    #  we have one long line of mixed key = "value" or key = <TYPE VALUE>  

    @attribs = $attribs =~ /s*(w+s+=s+w+s+|w+s+=s+".*?"|w+s+=s+<.*?>)s*/g; 

    for my $attrib ( @attribs ) { 
        warn "$attribn"; 
        my ($name,$value) = split /s*=s*/,$attrib; 

        if( $value =~ /^"/ ) {  
            $value =~ s/^"|"s*$//g; 
        } 
        elsif( $value =~ /^</ ) { 
           $value = [ parse_type_value_specifier( $start_tail ) ]; 
        } 
        else { 
            warn "Bad line"; 
        } 

        $constant{ $name } = $value; 
    } 

    return %constant; 
} 

sub parse_type_value_specifier { 
    my $tvs = shift; 

    my ($type,$value) = $tvs =~ /<(w+)s+(.*?)>/; 

    return $type,$value; 
} 

__DATA__ 
constant fixup GemEstabCommDelay = <U2 20> 
    vid = 6 
    name = "ESTABLISHCOMMUNICATIONSTIMEOUT" 
    units = "s" 
    min = <U2 0> 
    max = <U2 1800> 
    default = <U2 20> 


constant fixup private GemConstantFileName = <A "C:TMPCONST.LOG"> 
    vid = 4 
    name = ""  units = "" 


constant fixup private GemAlarmFileName = <A "C:TMPALARM.LOG"> 
    vid = 0 
    name = "" 
    units = ""

输出:

D:learningperl>hello1.pl
vid = 6
Bad line at D:learningperlhello1.pl line 102,<DATA> line 8.
name = "ESTABLISHCOMMUNICATIONSTIMEOUT"
units = "s"
min = <U2 0>
max = <U2 1800>
default = <U2 20>
vid = 4
Bad line at D:learningperlhello1.pl line 102,<DATA> line 13.
name = ""
units = ""
vid = 0
Bad line at D:learningperlhello1.pl line 102,<DATA> line 18.
name = ""
units = ""
$VAR1 = {
          'GemAlarmFileName' => {
                                  'vid' => '0      ','options' => [
                                                 'constant','fixup','private'
                                               ],'value' => '"C:\TMP\ALARM.LOG"','name' => '','type' => 'A','const_name' => 'GemAlarmFileName','units' => ''
                                },'GemEstabCommDelay' => {
                                   'vid' => '6      ','options' => [
                                                  'constant','fixup'
                                                ],'value' => '20','min' => [
                                              'U2','20'
                                            ],'name' => 'ESTABLISHCOMMUNICATIONSTIMEOUT','max' => [
                                              'U2','default' => [
                                                  'U2','20'
                                                ],'type' => 'U2','units' => 's','const_name' => 'GemEstabCommDelay'
                                 },'GemConstantFileName' => {
                                     'vid' => '4      ','options' => [
                                                    'constant','private'
                                                  ],'value' => '"C:\TMP\CONST.LOG"','const_name' => 'GemConstantFileName','units' => ''
                                   }
        };

D:learningperl>

你可以注意到’vid’=> ‘0’,(注意空格)

上面的代码从the answer.我正在研究它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读