Perl-배열
배열은 정렬 된 스칼라 값 목록을 저장하는 변수입니다. 배열 변수 앞에는 "at"(@) 기호가 있습니다. 배열의 단일 요소를 참조하려면 변수 이름과 함께 달러 기호 ($)를 사용하고 그 뒤에 대괄호 안에있는 요소의 인덱스를 사용합니다.
다음은 배열 변수를 사용하는 간단한 예입니다.
#!/usr/bin/perl
@ages = (25, 30, 40);
@names = ("John Paul", "Lisa", "Kumar");
print "\$ages[0] = $ages[0]\n";
print "\$ages[1] = $ages[1]\n";
print "\$ages[2] = $ages[2]\n";
print "\$names[0] = $names[0]\n";
print "\$names[1] = $names[1]\n";
print "\$names[2] = $names[2]\n";
여기서는 $ 기호 앞에 이스케이프 기호 (\)를 사용하여 인쇄했습니다. 다른 Perl은 그것을 변수로 이해하고 그 값을 출력 할 것입니다. 실행되면 다음 결과가 생성됩니다.
$ages[0] = 25
$ages[1] = 30
$ages[2] = 40
$names[0] = John Paul
$names[1] = Lisa
$names[2] = Kumar
Perl에서 List 및 Array 용어는 종종 상호 교환 가능한 것처럼 사용됩니다. 그러나 목록은 데이터이고 배열은 변수입니다.
어레이 생성
배열 변수는 @ 기호로 시작되며 괄호 또는 qw 연산자를 사용하여 채워집니다. 예를 들면-
@array = (1, 2, 'Hello');
@array = qw/This is an array/;
두 번째 줄은 qw // 연산자를 사용합니다.이 연산자는 문자열 목록을 반환하고 구분 된 문자열을 공백으로 구분합니다. 이 예에서는 요소가 4 개인 배열이됩니다. 첫 번째 요소는 'this'이고 마지막 (네 번째) 요소는 'array'입니다. 이것은 다음과 같이 다른 줄을 사용할 수 있음을 의미합니다.
@days = qw/Monday
Tuesday
...
Sunday/;
다음과 같이 각 값을 개별적으로 할당하여 배열을 채울 수도 있습니다.
$array[0] = 'Monday';
...
$array[6] = 'Sunday';
배열 요소에 액세스
배열에서 개별 요소에 액세스 할 때 변수 앞에 달러 기호 ($)를 붙인 다음 변수 이름 뒤에 대괄호 안에 요소 인덱스를 추가해야합니다. 예를 들면-
#!/usr/bin/perl
@days = qw/Mon Tue Wed Thu Fri Sat Sun/;
print "$days[0]\n";
print "$days[1]\n";
print "$days[2]\n";
print "$days[6]\n";
print "$days[-1]\n";
print "$days[-7]\n";
이것은 다음 결과를 생성합니다-
Mon
Tue
Wed
Sun
Sun
Mon
배열 인덱스는 0부터 시작하므로 첫 번째 요소에 액세스하려면 0을 인덱스로 제공해야합니다. 음수 색인을 제공 할 수도 있습니다.이 경우 배열의 시작이 아닌 끝에서 요소를 선택합니다. 이것은 다음을 의미합니다-
print $days[-1]; # outputs Sun
print $days[-7]; # outputs Mon
순차 배열
Perl은 연속되는 숫자와 문자에 대한 단축키를 제공합니다. 예를 들어 100까지 셀 때 각 요소를 입력하는 대신 다음과 같이 할 수 있습니다.
#!/usr/bin/perl
@var_10 = (1..10);
@var_20 = (10..20);
@var_abc = (a..z);
print "@var_10\n"; # Prints number from 1 to 10
print "@var_20\n"; # Prints number from 10 to 20
print "@var_abc\n"; # Prints number from a to z
여기서 이중 점 (..)이라고합니다. range operator. 이것은 다음 결과를 생성합니다-
1 2 3 4 5 6 7 8 9 10
10 11 12 13 14 15 16 17 18 19 20
a b c d e f g h i j k l m n o p q r s t u v w x y z
어레이 크기
배열의 크기는 배열의 스칼라 컨텍스트를 사용하여 결정할 수 있습니다. 반환 된 값은 배열의 요소 수입니다.
@array = (1,2,3);
print "Size: ",scalar @array,"\n";
반환되는 값은 항상 유효한 요소 수가 아니라 배열의 물리적 크기입니다. 이것을 증명할 수 있으며,이 조각을 사용하여 스칼라 @array와 $ # array의 차이점은 다음과 같습니다.
#!/usr/bin/perl
@array = (1,2,3);
$array[50] = 4;
$size = @array;
$max_index = $#array;
print "Size: $size\n";
print "Max Index: $max_index\n";
이것은 다음 결과를 생성합니다-
Size: 51
Max Index: 50
정보를 포함하는 배열에는 4 개의 요소 만 있지만 배열의 길이는 51 개이며 가장 높은 인덱스는 50입니다.
배열에서 요소 추가 및 제거
Perl은 배열에서 요소를 추가하고 제거하는 여러 유용한 함수를 제공합니다. 기능이란 무엇입니까? 지금까지 사용했습니다print다양한 값을 인쇄하는 기능. 마찬가지로 다양한 다른 기능에 사용할 수있는 다양한 다른 기능 또는 때때로 서브 루틴이라고도합니다.
| Sr. 아니. | 유형 및 설명 |
|---|---|
| 1 | push @ARRAY, LIST 목록의 값을 배열의 끝에 푸시합니다. |
| 2 | pop @ARRAY 팝 오프하고 배열의 마지막 값을 반환합니다. |
| 삼 | shift @ARRAY 배열의 첫 번째 값을 해제하고 반환하여 배열을 1만큼 줄이고 모든 값을 아래로 이동합니다. |
| 4 | unshift @ARRAY, LIST 목록을 배열 앞에 추가하고 새 배열의 요소 수를 반환합니다. |
#!/usr/bin/perl
# create a simple array
@coins = ("Quarter","Dime","Nickel");
print "1. \@coins = @coins\n";
# add one element at the end of the array
push(@coins, "Penny");
print "2. \@coins = @coins\n";
# add one element at the beginning of the array
unshift(@coins, "Dollar");
print "3. \@coins = @coins\n";
# remove one element from the last of the array.
pop(@coins);
print "4. \@coins = @coins\n";
# remove one element from the beginning of the array.
shift(@coins);
print "5. \@coins = @coins\n";
이것은 다음 결과를 생성합니다-
1. @coins = Quarter Dime Nickel
2. @coins = Quarter Dime Nickel Penny
3. @coins = Dollar Quarter Dime Nickel Penny
4. @coins = Dollar Quarter Dime Nickel
5. @coins = Quarter Dime Nickel
배열 요소 슬라이스
배열에서 "슬라이스"를 추출 할 수도 있습니다. 즉, 다른 배열을 생성하기 위해 배열에서 두 개 이상의 항목을 선택할 수 있습니다.
#!/usr/bin/perl
@days = qw/Mon Tue Wed Thu Fri Sat Sun/;
@weekdays = @days[3,4,5];
print "@weekdays\n";
이것은 다음 결과를 생성합니다-
Thu Fri Sat
슬라이스에 대한 사양에는 각각 쉼표로 구분 된 양수 또는 음수 인 유효한 인덱스 목록이 있어야합니다. 속도를 위해.. 범위 연산자-
#!/usr/bin/perl
@days = qw/Mon Tue Wed Thu Fri Sat Sun/;
@weekdays = @days[3..5];
print "@weekdays\n";
이것은 다음 결과를 생성합니다-
Thu Fri Sat
배열 요소 교체
이제 우리는 splice(), 다음 구문이 있습니다-
splice @ARRAY, OFFSET [ , LENGTH [ , LIST ] ]
이 함수는 OFFSET 및 LENGTH로 지정된 @ARRAY의 요소를 제거하고 지정된 경우 LIST로 대체합니다. 마지막으로 배열에서 제거 된 요소를 반환합니다. 다음은 예입니다-
#!/usr/bin/perl
@nums = (1..20);
print "Before - @nums\n";
splice(@nums, 5, 5, 21..25);
print "After - @nums\n";
이것은 다음 결과를 생성합니다-
Before - 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
After - 1 2 3 4 5 21 22 23 24 25 11 12 13 14 15 16 17 18 19 20
여기서 실제 교체는 6 번째 숫자로 시작되며 5 개의 요소가 6에서 10까지 숫자 21, 22, 23, 24 및 25로 교체됩니다.
문자열을 배열로 변환
라는 함수를 하나 더 살펴 보겠습니다. split(), 다음 구문이 있습니다-
split [ PATTERN [ , EXPR [ , LIMIT ] ] ]
이 함수는 문자열을 문자열 배열로 분할하고 반환합니다. LIMIT가 지정된 경우 최대 해당 수의 필드로 분할됩니다. PATTERN이 생략되면 공백으로 분할됩니다. 다음은 예입니다-
#!/usr/bin/perl
# define Strings
$var_string = "Rain-Drops-On-Roses-And-Whiskers-On-Kittens";
$var_names = "Larry,David,Roger,Ken,Michael,Tom";
# transform above strings into arrays.
@string = split('-', $var_string);
@names = split(',', $var_names);
print "$string[3]\n"; # This will print Roses
print "$names[4]\n"; # This will print Michael
이것은 다음 결과를 생성합니다-
Roses
Michael
배열을 문자열로 변환
우리는 join()함수를 사용하여 배열 요소를 다시 결합하고 하나의 긴 스칼라 문자열을 형성합니다. 이 함수에는 다음과 같은 구문이 있습니다.
join EXPR, LIST
이 함수는 LIST의 개별 문자열을 EXPR 값으로 구분 된 필드가있는 단일 문자열로 결합하고 문자열을 반환합니다. 다음은 예입니다-
#!/usr/bin/perl
# define Strings
$var_string = "Rain-Drops-On-Roses-And-Whiskers-On-Kittens";
$var_names = "Larry,David,Roger,Ken,Michael,Tom";
# transform above strings into arrays.
@string = split('-', $var_string);
@names = split(',', $var_names);
$string1 = join( '-', @string );
$string2 = join( ',', @names );
print "$string1\n";
print "$string2\n";
이것은 다음 결과를 생성합니다-
Rain-Drops-On-Roses-And-Whiskers-On-Kittens
Larry,David,Roger,Ken,Michael,Tom
배열 정렬
그만큼 sort()함수는 ASCII 숫자 표준에 따라 배열의 각 요소를 정렬합니다. 이 함수에는 다음과 같은 구문이 있습니다.
sort [ SUBROUTINE ] LIST
이 함수는 LIST를 정렬하고 정렬 된 배열 값을 반환합니다. SUBROUTINE이 지정되면 요소를 정렬하는 동안 SUBTROUTINE 내부에 지정된 논리가 적용됩니다.
#!/usr/bin/perl
# define an array
@foods = qw(pizza steak chicken burgers);
print "Before: @foods\n";
# sort this array
@foods = sort(@foods);
print "After: @foods\n";
이것은 다음 결과를 생성합니다-
Before: pizza steak chicken burgers
After: burgers chicken pizza steak
정렬은 단어의 ASCII 숫자 값을 기준으로 수행됩니다. 따라서 가장 좋은 방법은 먼저 배열의 모든 요소를 소문자로 변환 한 다음 정렬 기능을 수행하는 것입니다.
$ [특수 변수
지금까지 프로그램에서 정의한 간단한 변수를보고 스칼라 및 배열 값을 저장하고 인쇄하는 데 사용했습니다. Perl은 사전 정의 된 의미를 가진 수많은 특수 변수를 제공합니다.
다음과 같이 쓰여진 특수 변수가 있습니다. $[. 이 특수 변수는 모든 배열의 첫 번째 인덱스를 포함하는 스칼라입니다. Perl 배열은 0부터 시작하는 인덱싱을 사용하기 때문에 $ [는 거의 항상 0입니다. 그러나 $ [를 1로 설정하면 모든 배열이 기반 인덱싱을 사용합니다. 0 이외의 다른 인덱싱은 사용하지 않는 것이 좋습니다. 그러나 $ [변수의 사용법을 보여주는 한 가지 예를 들어 보겠습니다.
#!/usr/bin/perl
# define an array
@foods = qw(pizza steak chicken burgers);
print "Foods: @foods\n";
# Let's reset first index of all the arrays.
$[ = 1;
print "Food at \@foods[1]: $foods[1]\n";
print "Food at \@foods[2]: $foods[2]\n";
이것은 다음 결과를 생성합니다-
Foods: pizza steak chicken burgers
Food at @foods[1]: pizza
Food at @foods[2]: steak
배열 병합
배열은 쉼표로 구분 된 값 시퀀스이기 때문에 아래와 같이 결합 할 수 있습니다.
#!/usr/bin/perl
@numbers = (1,3,(4,5,6));
print "numbers = @numbers\n";
이것은 다음 결과를 생성합니다-
numbers = 1 3 4 5 6
임베디드 배열은 아래와 같이 메인 배열의 일부가됩니다.
#!/usr/bin/perl
@odd = (1,3,5);
@even = (2, 4, 6);
@numbers = (@odd, @even);
print "numbers = @numbers\n";
이것은 다음 결과를 생성합니다-
numbers = 1 3 5 2 4 6
목록에서 요소 선택
목록 표기법은 배열 표기법과 동일합니다. 목록에 대괄호를 추가하고 하나 이상의 인덱스를 제공하여 배열에서 요소를 추출 할 수 있습니다.
#!/usr/bin/perl
$var = (5,4,3,2,1)[4];
print "value of var = $var\n"
이것은 다음 결과를 생성합니다-
value of var = 1
마찬가지로 선행 @ 문자가 없어도 슬라이스를 추출 할 수 있습니다.
#!/usr/bin/perl
@list = (5,4,3,2,1)[1..3];
print "Value of list = @list\n";
이것은 다음 결과를 생성합니다-
Value of list = 4 3 2