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