Perl의 목록과 그룹 학습 노트

11578 단어
목록
목록은 괄호 안에 포함된 서열의 값입니다. 어떤 값이든, 비어 있을 수도 있습니다. 예를 들어 (1, 5.3, "Hello", 2), 빈 목록: ().주: 하나의 수치만 포함하는 목록(예를 들어 (43.2)은 이 수치 자체(즉 43.2)와 다르지만 서로 바꾸거나 값을 부여할 수 있습니다.목록 예:
 
  
    (17, $var, "a string")
    (17, 26 << 2)
    (17, $var1 + $var2)
($value, "The answer is $value")

2. 배열 - 목록의 저장
목록은 배열 변수에 저장됩니다. 단순 변수와 달리 배열 변수는 다음과 같은 문자로 시작합니다.
 
  
    @array = (1, 2, 3);

참고:
(1) 배열 변수가 생성될 때 초기 값은 빈 목록입니다: ().
(2) PERL은 @와 $로 배열 변수와 단순 변수를 구분하기 때문에 같은 이름을 배열 변수와 단순 변수에 동시에 사용할 수 있습니다. 예를 들어 다음과 같습니다.
 
 
  
     $var = 1;
     @var = (11, 27.1 , "a string");
 

그러나 이렇게 하면 헷갈리기 쉬우므로 추천하지 않습니다.
1. 그룹의 접근
수조의 값은 아래 표시를 통해 액세스되며, 첫 번째 요소는 0으로 표시됩니다.존재하지 않는 배열 요소에 액세스하려고 하면 NULL이 되지만 배열 크기를 초과하는 요소에 값을 지정하면 배열이 자동으로 증가하여 원래 없던 요소 값이 NULL이 됩니다.예:
 
  
    @array = (1, 2, 3, 4);
    $scalar = $array[0];
    $array[3] = 5; # now @array is (1,2,3,5)
    $scalar = $array[4]; # now $scalar = null;
    $array[6] = 17; # now @array is (1,2,3,5,"","",17)

그룹 간 복사
 
  
     @result = @original;

배열로 목록에 값을 매기다
 
  
     @list1 = (2, 3, 4);
     @list2 = (1, @list1, 5); # @list2 = (1, 2, 3, 4, 5)

단순 변수에 대한 그룹 값
 
     (1) @array = (5, 7, 11);
 
 
  
      ($var1, $var2) = @array; # $var1 = 5, $var2 = 7, 11
  

     (2) @array = (5, 7);
 
 
  
      ($var1, $var2, $var3) = @array; # $var1 = 5, $var2 = 7, $var3 ="" (null)
 

표준 입력(stdIN)에서 변수에 값을 지정합니다.
 
  
     $var = ;
     @array = ; # ^D

2. 문자열의 네모난 괄호와 변수 교체
 
  
    "$var[0]" @var 。
    "$var\[0]" "[" , "$var". "[0]",$var ,[0] 。
    "${var}[0]" "$var" ."[0]"。
    "$\{var}" , :${var}.

3. 목록 범위:
 
  
    (1..10) = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
    (2, 5..7, 11) = (2, 5, 6, 7, 11)
    (3..3) = (3)

  .실수에 사용
 
 
  
    (2.1..5.3) = (2.1, 3.1 ,4.1, 5.1)
    (4.5..1.6) = ()

  .문자열에 사용
 
 
  
    ("aaa".."aad") = ("aaa","aab", "aac", "aad")
    @day_of_month = ("01".."31")

  .변수 또는 표현식 포함 가능
 
 
  
    ($var1..$var2+5)
 

  .팁:
 
 
  
    $fred = "Fred";
    print (("Hello, " . $fred . "!
") x 2);
 

결과는 다음과 같습니다.
 
 
  
    Hello, Fred!
    Hello, Fred!
 

4. 수조의 출력: (1)@array=(1,2,3);
 
  
    print (@array, "
");

결과: 123
(2) @array = (1, 2, 3);
 
  
    print ("@array
");
 

결과는 다음과 같습니다. 1, 2, 3.
5. 리스트/배열의 길이
배열 변수가 예상되는 단순 변수에 나타나면 PERL 해석기는 해당 길이를 취합니다.
  

   @array = (1, 2, 3); 
  
    $scalar = @array; # $scalar = 3, @array
    ($scalar) = @array; # $scalar = 1, @array
 

참고: 배열의 길이를 순환 횟수로 다음과 같이 프로그래밍할 수 있습니다.
   

   $count = 1; 
  
    while ($count <= @array) {
    print ("element $count: $array[$count-1]
");
    $count++;
    }
 

6. 하위 그룹

   @array = (1, 2, 3, 4, 5); 
  
    @subarray = @array[0,1]; # @subarray = (1, 2)
    @subarray2 = @array[1..3]; # @subarray2 = (2,3,4)
    @array[0,1] = ("string", 46); # @array =("string",46,3,4,5) now
    @array[0..3] = (11, 22, 33, 44); # @array = (11,22,33,44,5) now
    @array[1,2,3] = @array[3,2,4]; # @array = (11,44,33,5,5) now
    @array[0..2] = @array[3,4]; # @array = (5,5,"",5,5) now
 

하위 배열 형식으로 요소를 교환할 수 있습니다.
   

   @array[1,2] = @array[2,1]; 
 

7. 배열에 대한 라이브러리 함수 (1)sort--문자순으로 정렬
  

   @array = ("this", "is", "a","test"); 
  
    @array2 = sort(@array); # @array2 = ("a","is", "test", "this")
    @array = (70, 100, 8);
    @array = sort(@array); # @array = (100, 70, 8) now
 

(2)reverse-반전수 그룹
 
  
    @array2 = reverse(@array);
    @array2 = reverse sort (@array);
 

(3)chop-수조제거
chop의 의미는 stdIN(키보드)이 문자열을 입력할 때 마지막 문자인 줄 바꿈을 제거하는 것입니다.만약 그것이 수조에 작용한다면, 수조의 모든 요소를 이렇게 처리할 것이다.
   

   @list = ("rabbit", "12345","quartz"); 
  
    chop (@list); # @list = ("rabbi", "1234","quart") now
 

(4) join/split--연결/분할
join의 첫 번째 매개 변수는 연결에 사용되는 중간 문자이고 나머지는 연결을 기다리는 문자 그룹입니다.
  

   $string = join(" ", "this", "is","a", "string"); #    "this is a string" 
  
    @list = ("words","and");
    $string = join("::", @list, "colons"); # "words::and::colons"
@array = split(/::/,$string); # @array = ("words","and", "colons") now

------------------------------------------------- 스칼라를 Perl의 단수로 간주한다면 리스트(list)와 배열은 Perl의 복수로 간주할 수 있습니다.
목록은 표량의 질서 집합이다.배열은 목록을 포함하는 변수입니다.Perl에서 이 두 용어는 서로 바꿀 수 있다.그러나 엄격한 의미에서 보면 목록은 데이터를 가리키고 수조는 변수명이다.몇몇 값(목록)이 있을 수 있지만 수조에 속하지 않는다.그러나 모든 그룹의 표량은 비어 있을 수 있지만 목록이 있다.
목록의 모든 요소는 하나의 독립된 표량 값이다.이 값들은 순서가 있다. 즉, 이 값들은 처음부터 마지막 요소까지 고정된 서열이 있다는 것이다.수조나 목록의 원소는 번호를 매겼고 그 인덱스는 정수 0에서 시작하여 순서대로 1씩 증가하기 때문에 수조나 목록의 첫 번째 원소의 인덱스는 0이다.
모든 요소는 하나의 독립된 표량 값이기 때문에, 목록이나 수조는 숫자, 문자열,undef 값, 또는 임의의 다른 종류의 표량 값의 조합을 포함할 수 있다.그러나 이들 원소의 유형은 통상적으로 일치한다.
목록과 그룹은 임의의 원소를 포함할 수 있습니다.최소한 0 요소를 함유하고 있으면 사용 가능한 메모리를 채울 수 있습니다.여기에는 "불필요한 제한은 없다"는 펄의 디자인 철학도 구현됐다.
1. Perl에서 접근할 수 있는 그룹 요소는 색인 값을 통해 접근할 수 있습니다. 예를 들어 $array[0] = "test";print $array[0];
그룹 이름과 표량은 완전히 다른 이름 공간 (namespace) 에 속합니다.같은 프로그램에도 $array라는 표량 변수를 동시에 포함할 수 있습니다.Perl은 그것들을 완전히 다른 사물로 보고 혼동하지 않는다.(이렇게 하는 것을 건의하지 않아 헷갈리기 쉽다)
2. 특수한 수조 인덱스는 하나의 원소를 수조의 마지막 원소 뒤에 저장하면 수조가 자동으로 증가한다.Perl은 메모리가 충분하기만 하면 길이에 제한이 없다.Perl에서 요소를 생성해야 하는 경우 해당 값은 undef입니다.
때때로 수조의 마지막 요소의 인덱스를 알아야 한다.array 배열과 같이 마지막 요소의 인덱스는 $#array입니다.
간편한 방법: 그룹의 음수 인덱스 값은 마지막 요소부터 시작합니다.그러나 이 인덱스들이 순환한다고 생각하지 마라.만약 수조에 3원소가 있다면 유효한 음수 인덱스 값은 -1(마지막 원소), -2(중간 원소), -3(첫 번째 원소)이다.실제로 -1을 제외한 다른 음수 인덱스 값을 사용하는 사람은 거의 없다.
3. 목록 수조는 괄호로 묶여 있고 그 원소는 쉼표로 구분된 목록으로 이 값들은 수조의 원소를 구성한다.
목록의 요소는 상수가 아니거나 이 문장을 실행할 때 값을 계산하는 표현식일 수도 있습니다.목록에는 임의의 스칼라 값을 포함할 수 있습니다.
4.qw 약자 실천은 문자열의 목록이 Perl에서 자주 사용된다는 것을 나타낸다.대량의 인용부호를 입력하지 않고 비슷한 기능을 할 수 있는 간편한 방법이 있는데 그것이 바로 qw를 사용하는 것이다.
qw는 "quoted words"또는 "quoted by whitespace"를 표시합니다. 그 해석에 상관없이 Perl은 그것들을 단인용 문자열로 처리합니다. 이중인용 문자열처럼 qw에서 $fred를 사용할 수 없습니다.화이트스페이스 (스페이스 바,spaces,tabs,newlines 등 문자열) 는 무시되고, 나머지는 목록을 구성하는 요소입니다.
qw는 인용이기 때문에 qw에 주석을 추가할 수 없습니다.
NOTE:Perl에서는 모든 문장부호를 qw 목록의 경계부호로 사용할 수 있습니다.
5. 목록 지정은 스칼라 값과 유사하며 목록 값도 변수에 지정할 수 있습니다.
 
  
($fred[0], $fred[1], $fred[2]) = (”haha”, “wawa”, undef);
print $fred[0].$fred[1].$fred[2];

왼쪽 목록의 모든 변수는 새로운 값을 얻었고, 세 개의 부치문구를 이용하여 얻은 결과와 같다.목록은 값을 부여하기 전에 이미 만들어졌기 때문에 Perl에서 다음과 같은 간단한 방법으로 두 변수의 값을 교환할 수 있습니다.
NOTE: 이 그룹을 인용하려고 할 때 Perl은 간단한 쓰기 방법을 가지고 있습니다.그룹 이름 앞에 @ (뒤에 중괄호가 없음) 을 붙여서 전체 그룹을 참조합니다.
6.pop과push작업pop은 배열의 마지막 요소를 추출하여 반환합니다.
 
  
@array = 5..9;
pop @array;
foreach $t (@array) {
print $t;
}

pop 이후 괄호를 사용하거나 사용하지 않을 수 있습니다.이것은 Perl에서 통용되는 규칙이다. 만약 괄호의 의미가 변하지 않는다면, 괄호는 선택할 수 있는 것이다.
pop과 반대되는 작업은push입니다. 이것은 하나의 원소 (또는 한 열의 원소) 를 그룹의 끝에 추가할 수 있습니다.
 
  
@array = 5..9;
push(@array,0);
foreach $t (@array) {
print $t;
}

NOTE:push의 첫 번째 매개 변수나 pop의 유일한 매개 변수는 배열 변수여야 합니다.
7.shift 및 unshift 작업
push와 pop은 수조의 끝을 조작하고, 그에 상응하여 unshift와shift는 한 수조의 시작을 조작한다. (수조의 왼쪽에는 최소 하표 요소가 있다.)
8. 문자열을 표량과 유사하게 삽입하고, 문자열도 더블 인덱스 문자열에 삽입할 수 있습니다.삽입된 배열 요소는 자동으로 공백으로 분리됩니다.
 
  
@rocks = qw{wawa kaka haha};
print "@rocks";

9.Perl에서 가장 많이 사용하는 기본 변수: $Perl에서 유일한 기본 변수는 아니지만, 가장 보편적으로 사용되는 것이다.많은 예에서 Perl이 어떤 변수나 값을 요구하지 않을 때 자동으로 변수 $를 사용하는 것을 볼 수 있습니다.이것은 프로그래머가 어떤 변수를 사용할지 생각하는 데 많은 시간을 절약할 것이다.
 
  
$_ ="yahoo google baidu";
print;

10.reverse 조작reverse (역전) 조작은 입력한 일련의 목록 (수조일 수도 있음) 을 반대 순서로 되돌려줍니다.
 
  
@fred = 6..10;
@barney = reverse(@fred);
print "@barney";

NOTE: Reverse는 매개 변수의 값을 바꾸지 않고 역전된 목록을 되돌려줍니다.만약 반환 값이 어떤 변수에 부여되지 않았다면, 이 조작은 아무런 의미가 없다
11.sort조작sort조작은 입력한 일련의 목록(수조일 수 있음)을 내부의 문자 순서에 따라 정렬합니다.
 
  
@rocks = qw/ bedrock slate rubble granite /;
@sorted = sort(@rocks);
print "@sorted";

12. 표량과 목록 상하문 NOTE: 주어진 표현식은 서로 다른 상하문(contexts)에서 그 의미가 다르다.
상하문은 표현식이 존재하는 곳을 가리킨다.Perl이 표현식을 해석할 때, 보통 표량값이나 목록값을 기대합니다.이것은 표현식의 상하문 환경이라고도 부른다.
 
  
@people = qw( fred barney betty );
@sorted = sort @people;
$number = 42 + @people;

print "@sorted";# context:barney , betty, fred
print "
";
print "$number";# context:42+3, 45


13. 스칼라Context에서 List-Producing 표현식 사용
 
  
@backwards = reverse qw / yabba dabba doo /;
print "@backwards"; # doo, dabba, yabba

print "
";
$backwards = reverse qw/ yabba dabba doo /;
print "$backwards"; # oodabbadabbay


14. 목록Context에서 Scalar-Producing 표현식을 사용하여 표현식이 목록 값이 아니면 스칼라 값이 자동으로 요소 목록으로 변환됩니다.
 
  
@fred = 6*7;
@barney = "hello".' '. "world";

print "@fred"; # 42
print "@barney"; # hello world


15. 커서Context로 강제로 변환하려면 커서context가 필요할 수도 있고 Perl이 원하는 것은 목록입니다.이 경우 함수 scalar를 사용할 수 있습니다.Perl에 태그 context를 제공하라는 사실만을 알려주는 실제 함수는 아닙니다.
 
  
@rocks = qw(talc quartz jade obsidian);
print "How many rocks do you have?
";
print "I have ", @rocks, "rocks!
"; # , rocks
print "I have ", scalar @rocks, "rocks!
"; # ,

NOTE: 목록 context로 강제로 변환할 함수가 없습니다.

좋은 웹페이지 즐겨찾기