는 방법 Perl 문자열로 변환하 번호

어떤 문자열에는 Perl 프로그래밍 언어를 사용할 수 있습니다. 예를 들어 다음과 같습니다.

▶ Run
#!/usr/bin/perl

my $str = 'Hello';

print $str + 100;

프로그램이 표시됩니다 수 100. 문자열 'Hello' 할 때에 사용되는 산수 작업을 수 0. 수 0 plus 100 것입니다 100 과는 우리가 무엇을 할 것인 화면에 표시. 자주 사용되는 단어는"수치"컨텍스트를 참조 는 무엇입 가치의 작동으로 사용된 번호입니다.

문자열 'Hello' 에 숫자 컨텍스트 0. 하지만 모든 문자열에서는 Perl 은 없습니다.

는 경우에 시작 부분의 라인은 숫자,그 번호가 합의에 이러한 숫자입니다. 예를 들어 다음과 같습니다.

▶ Run
#!/usr/bin/perl

my $str = '23ASDF';

print $str + 0;

프로그램이 표시됩니다 수 23.

여기에 몇 가지 예입,문자열 수 있는 그 때에 사용되는 숫자 context:

''          -> 0
'1.0ASDF'   -> 1
'1.2ADF'    -> 1.2
'0123ASDF'  -> 123
' 34ASDF'   -> 34
'0x13ABC'   -> 0
'0b10ABC'   -> 0
'1e+25ASDF' -> 1e+25
' +7ASDF'   -> 7
'-13ABC'    -> -13
'--13ABC'   -> 0
' 10 100'   -> 10

여기 스크립트에 표시되는 동일한 데이터:

▶ Run
#!/usr/bin/perl

use feature qw(say);

foreach my $str ('', '1.0ASDF', '1.2ADF', '0123ASDF', ' 34ASDF',  '0x13ABC', '0b10ABC', '1e+25ASDF', ' +7ASDF', '-13ABC', '--13ABC', ' 10 100') {
     say "'$str' -> " . ($str + 0);
}

use warnings;

는 경우에는 Perl 스크립트가 use warnings; (거의 항상 하는 가치가 있음),문자열을 사용에 숫자 컨텍스트 이에 인쇄 STDERR 경고:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my $str = 'Hello';

print $str + 100;

여기에 프로그램이 출력:

Argument "Hello" isn't numeric in addition (+) at script.pl line 8.
100

추천

가 추천하지 않는 이 기능을 사용하의 언어입니다. 를 얻을 필요가있는 경우는 번호로 문자열에서,그것을 명시적으로 의 도움으로 정규표현식이 있습니다. 할 수 있도록 형식을 설명하는 예상하는 데이터를 수신할 수 있을 것입 을 잡을 때의 상황 데이터에 도착한 잘못된 형식으로(신의 침묵하는 영수증의 영)입니다.

여기에서 샘플 코드입니다. 우리가 알고 있는 데이터의 시작 부분에서 이 문자열은 정수리를 계산해야 합계 숫자에 모든 행이 있습니다.

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my @strings = (
    '10 apples',
    '0 potatoes',
    '8 oranges',
    'nine lemons',
);

my $sum = 0;

foreach my $str (@strings) {
    if ($str =~ /^([0-9]+)/) {
        $sum += $1;
    } else {
        die "String '$str' is in incorrect format";
    }
}

print $sum;

이 프로그램을 실행하면 우리는 오류 String 'nine lemons' is in incorrect format at script.pl line 19.. 감사 우리는 데이터가 있는 문제입니다. 따라서 우리가 어떻게 수정하거나 대신 데이터의 문자열 'nine lemons' 문자열을 사용하 '9 lemons',또는 당신할 수 있는 명시적으로 이 줄을 무시하는 루프에서 next if $str eq 'nine lemons'.

만약 우리가 사용하는 표준 방법을 Perl 변환할 문자열을 수 루프는 것은 훨씬 더 간단하다:

foreach my $str (@strings) {
    $sum += $str;
}

그러나 이 경우에,우리는 알지 못하는 데이터가 일치하지 않은 형식으로 우리가 기대합니다.

다른 기사