제3장 Perl 언어(二)-값

7253 단어
변수 값
초보 프로그래머는 종종 자신의 프로그램이 무엇을 해야 하는지에만 관심을 가지지만, 성숙한 프로그래머는 프로그램에 적합한 데이터 모델을 어떻게 설계해야 하는지를 생각하고 있다. ***변수는 데이터를 추상적으로 만드는 데 도움을 줍니다. 변수의 값은 프로그램을 구체화하여 실제 역할을 발휘하는 것입니다. ****변수의 값은 이름, 주소, 집, 학교의 거리, 작년의 비용 등 당신이 원하는 모든 것일 수 있습니다.프로그램에서 데이터의 형식에 대한 요구는 왕왕 매우 엄격하다.프로그래머는 그들의 데이터를 표시하기 위해 효과적인 방법 (간단하고 빠르며 효율적) 을 필요로 한다.
문자열
문자열은 일련의 문자이다.예를 들어 그것은 당신의 이름일 수도 있고, 그림 파일의 내용일 수도 있으며, 프로그램 자체의 원본 코드일 수도 있다.
프로그램에서 문자열을 표시하려면 문자열을 둘러싸야 합니다. 가장 흔히 볼 수 있는 것은 작은 따옴표나 큰 따옴표로 문자열을 둘러싸는 것입니다.
my $name = 'Donner Odinson, Bringer of Despair';
my $address = "Room 539, Bilskirnir, Valhalla";

작은따옴표로 둘러싸인 문자는 *****글자 자체***를 의미하고, 작은따옴표로 둘러싸인 문자는 ****** 글자 자체가 아닌 의미(내부 삽입/이스케이프)****를 의미할 수도 있습니다.
작은따옴표의 사용에는 두 가지 예외가 있다. 작은따옴표 자체를 표시하려면 앞에 반사봉을 달아야 한다.백슬래시를 표현하려면 앞에 백슬래시를 붙여야 합니다.
'Don\'t forget to escape'    #Don't forget to escape
'Modern \\ Perl'    #Modern \ Perl
'backslash, not a quote: \\'    #backslash, not a quote:\

큰따옴표로 둘러싸인 문자는 더 많은 백슬래시 이스케이프를 지원하는 등 마법이 강하다.
"\t"
"
" "\f" "\b"

그것들은 각각 탭, 줄 바꾸기, 페이지 바꾸기, 체크아웃을 나타낸다.
물론 더블 인용부호로 둘러싸인 일반 문자의 의미는 변하지 않고 문자열의 글자 자체만을 나타낸다.문자열을 연결하려면 점호 연산자(.)를 사용합니다.
my $kitten = 'Choco' . ' ' . 'Spidermonkey';
my $kitten = "Choco" . " " . "Spidermonkey";

너도 더블 인용부호에 변수를 넣을 수 있다. 그러면 변수의 현재 내용은 문자열의 일부분이 되고, 마치 그들을 한데 연결하는 것과 같다.
my $factoid = "$name lives at $address!";
my $factoid = $name . ' lives at ' . $address . '!';

큰따옴표 자체를 나타내려면 앞에 백슬래시 이스케이프를 넣습니다.
my $quote = "\"Ouch,\", he cried. \"That hurt!\"";    #"Ouch,", he cried. "That hurt!"

위의 이 예는 반사봉이 좀 많아서 엉망진창으로 보인다.그래서 Perl에서는 이런 상황을 간단하게 하기 위해 조작부호(q)와 조작부호(qq)를 제공했다.q 조작부호의 효과는 인용부호와 같아서 안에 삽입하지 않는다.qq 조작부호는 더블 인덱스와 유사하며, 회의 안에 삽입됩니다.그것들은 모두 경계를 정해야 한다.정계부호는 두 개의 같은 기호일 수도 있고 쌍을 이루는 기호일 수도 있다.적절한 경계 문자를 선택하면 위 예에서 백슬래시를 피할 수 있습니다.
my $quote = qq{"Ouch", he said. "That hurt!"};
my $reminder = q^Don't escape the single quote!^;
my $complaint = q{It's too early to be awake.};

복잡한 문자열을 설명할 필요가 있을 때heredoc 문법을 사용할 수 있습니다.
my $blurb =<

여기< 3 。 heredoc 。 ( , -- )。 ( )。END_BLURB 。**** !****
sub some_function {
     my $ingredients =<

유니코드 및 문자열
유니코드는 세계의 모든 문자를 나타내는 문자 시스템입니다.상대적으로 순수한 영문 문자로 영문 문자 집합은 127글자만 있고 8개의 비트만 있으면 충분하다.두 유형 모두 널리 사용되는 문자 세트로, Perl 문자열은 두 유형 모두에 대해 지원됩니다.
유니코드 문자 시퀀스에는 유니코드 문자 세트에서 고유한 문자를 식별하는 코드점이 있습니다.
Octet 서열(8자리 서열)에서 일반적으로 말하는 2진수 데이터는 8자리 서열이고 8비트 숫자로 0에서 255를 나타낼 수 있다.
왜 바이트가 아니라 Octet 서열이라고 합니까?서로 다른 컴퓨터는 바이트에 대한 정의가 다르지만, Octet은 항상 8개의 비트를 나타낸다.
****Perl은 기본적으로 모든 입력 데이터를 8자리 시퀀스로 취급합니다.***
문자 인코딩
**** 파일 핸들에 유니코드 인코딩을 사용합니다 **** 파일을 어떤 인코딩으로 처리해야 하는지 알고 있다면 IO 레이어에서 지정할 수 있으며 Perl은 자동으로 해당 변환을 수행합니다.UTF-8 인코딩으로 파일을 읽는 경우:
open my $fh, '<:utf8 my="">;

열린 파일 핸들에 대해 binmode 메서드를 사용할 수 있습니다.
binmode $fh, ':utf8';
my $unicode_string = ;
binmode STDOUT, ':utf8';
say $unicode_string;

모든 곳에서 UTF-8을 편리하게 사용하려면utf8::all 모듈을 시도해 보십시오.
****는 데이터에 유니코드 인코딩 ****시스템 모듈 엔코드로 다양한 인코딩 변환 기능을 제공합니다.
my $from_utf8 = decode('utf8', $data);    # $data  UTF-8  
my $to_latin1 = encode('iso-8859-1', $string);    # $string      

읽은 데이터를 정확하게 디코딩하고 출력할 때 정확한 인코딩을 하면 모든 인코딩 문제를 피할 수 있다.
****소스 코드에서 유니코드 인코딩 ****utf8을 사용하면 코드에서 UTF-8 문자를 사용할 수 있습니다.
use utf8;
sub £_to_¥ { ... }
my $yen = £_to_¥('1000£');

이렇게 코드를 쓰는 전제 조건은 편집기가 UTF-8을 지원하고 코드 파일을 정확한 인코딩 방식으로 저장할 수 있다는 것이다.
큰따옴표로 둘러싸인 문자열에서는\x{} 구문을 사용하여 유니코드 문자를 나타낼 수 있습니다.
my $escaped_thorn = "\x{00FE}";

일부 유니코드 문자는 이름이 있습니다. charnames가 활성화되면\N{} 구문을 사용하여 다음과 같이 표시할 수 있습니다.
use charnames ':full';

my $escaped_thorn = "\x{00FE}";
my $named_thorn = "\N{LATIN SMALL LETTER THORN}";

**** 암시적 변환 **** 여러 문자 세트를 혼합하여 사용하고 명시하지 않을 때 Perl은 자동으로 문자열을 인코딩하여 변환합니다. 이로 인해 매우 은밀한 문제가 발생할 수 있으므로 그러지 마십시오!
만약 당신의 업무 내용이 유니코드를 처리하는 것이라면, Perl 5.16 이상의 버전을 사용하고, 항상 이러한 원칙을 따르십시오. 읽은 데이터는 정확한 디코딩을 하고, 출력할 때는 정확한 인코딩을 합니다.
Perl 및 유니코드에 대한 자세한 내용은 다음을 참조하십시오.http://www.perl.com/pub/2012/04/perlunicook-standard-preamble.html
숫자.
Perl은 정수와 부동 소수점 숫자를 지원하는데, 2진법, 8진법, 10진법, 16진법을 다른 방식으로 표시할 수 있다.
my $integer = 42;    #  
my $float = 0.007;    #   
my $sci_float = 1.02e14;    #     ,   
my $binary = 0b101010;    #   0b  
my $octal = 052;    #    0  
my $hex = 0x20;    #    0x  

또한 밑줄을 사용하여 가독성을 높일 수 있습니다. (쉼표는 Perl에서 특별한 의미가 있기 때문에 쉼표가 아님)
my $billion = 1000000000;
my $billion = 1_000_000_000;
my $billion = 10_0_00_00_0_0_0;

보기 드문 경우 숫자와 문자가 서로 바뀌는 데 어려움을 겪을 수 있습니다. 시스템 모듈인 Scalar:::Util (looks like number 함수) 를 보십시오.만약 숫자 형식 (예를 들어 정형 숫자, 부동점 숫자) 을 식별할 필요가 있다면, Regexp::Common 모듈 (CPAN) 을 시험해 보십시오.
Undef
Perl의 undef는 할당되지 않고 불확실하며 알 수 없는 값을 나타냅니다.선언되었지만 정의되지 않은 스칼라 값은 undef입니다.
my $name = undef;     # unnecessary assignment
my $rank;     # also contains undef

블라인드 언어 환경에서 undef는 가짜값과 같다.문자열 언어 환경에 undef 값의 변수를 삽입하면 경고가 발생합니다.
my $undefined;
my $defined = $undefined . '... and so forth';

#Use of uninitialized value $undefined in concatenation (.) or string...

defined를 사용하여undef값이 가짜로 되돌아오는 것을 테스트하기;undef 이외의 모든 값을 진짜로 되돌려줍니다.
my $status = 'suffering from a cold';
say defined $status;     # 1, which is a true value
say defined undef;     # empty string; a false value

빈 목록
값 오른쪽에 작은 괄호 한 쌍을 사용하면 빈 목록을 표시합니다.표량 언어 환경에서 빈 목록은undef와 같다.목록의 언어 환경에서 빈 목록이다.지정의 왼쪽에 있는 경우 ()는 목록 문맥으로 적용됩니다.
my $count = () = get_clown_hats();

우선 빈 목록은 목록 언어 환경으로 강제하기 때문에 목록 언어 환경에서 get 를 호출합니다clown_hats (), 함수는 일련의 값 (목록) 을 되돌려줍니다.그리고 빈 목록에 값을 부여합니다. 빈 목록은 모든 값을 버리고, 목록 값을 부여합니다. 이 작업은 상하문에 표시되어 있기 때문에 결과는 요소의 개수를 되돌려줍니다.지금은 좀 휘감겨 보일 수도 있지만, Perl 기술이 향상되면서 점점 자연스러워질 것이다.
리스트
쉼표로 구분된 하나 이상의 표현식 그룹이 목록입니다.값으로 사용할 수 있습니다.
my @first_fibs = (1, 1, 2, 3, 5, 8, 13, 21);

지정된 값에 사용할 수도 있습니다.
my ($package, $filename, $line) = caller();

표현식 목록으로
say name(), ' => ', age();

****참고: 목록은 괄호로 작성되지 않으며 쉼표로 작성됩니다.****
범위 조작부호 사용하기 (...)목록을 쉽게 만들 수 있습니다.
my @chars = 'a' .. 'z';
my @count = 13 .. 27;

qw() 연산자를 사용하여 공백을 구분하여 문자열 목록을 만들 수 있습니다.
my @stooges = qw( Larry Curly Moe Shemp Joey Kenny );

qw () 조작부호에 주석 기호와 쉼표가 존재하면 경고가 발생합니다. 이 경우 실수로 잘못 썼을 수도 있습니다.
목록은 그룹과 비슷하지만, 그들은 서로 바꿀 수 없다.목록은 값이고, 그룹은 용기입니다.

좋은 웹페이지 즐겨찾기