Perl 어레이를 인쇄하는 쉬운 방법? (약간 서식 포함)


97

각 요소 사이에 쉼표가있는 Perl 배열을 쉽게 인쇄 할 수있는 방법이 있습니까?

for 루프를 작성하는 것은 꽤 쉽지만 우아하지는 않습니다.

답변:


150

그냥 사용하십시오 join():

# assuming @array is your array:
print join(", ", @array);

9
또는 정말 더러워지고 싶다면 : {local $,=', ';print @array}.
musiKk 2011

10
한 가지 이상의 방법이 있습니다.하지만 이것은 당신이 당신을 미워한 후에 코드를 유지하는 사람을 만들지 않는 방법입니다. 예, perldoc perlvar가 존재하지만, 모든 난해한 변수가 무엇을하는지 알아 내기 위해 perlvar를 한 줄씩 치는 것보다 "join ','@array"를 훑어보고 싶습니다.
Oesor 2011

@Oesor : 그래서 내가 더럽다고 불렀습니다. 하지만 글쎄요, 다른 답변을 보면 저는 정말 최악의 범죄자가 아닙니다. :)
musiKk 2011

@musiKK 나는 그것을 좋아한다! 동료 동료들에게 당혹감을주고 싶을 때 사용할 것입니다. :)
Alex

3
이것은 디렉토리 내용을 인쇄하는 데 정말 잘 작동했습니다. print "current directory contains " . join(', ', <*>) . "\n";
Randall


18

Perl을 막 시작한 사람이 이해할 수있는 종류의 명확성을 위해 코딩하는 경우, 전통적인이 구조는 높은 수준의 명확성과 가독성으로 그것이 의미하는 바를 말합니다.

$string = join ', ', @array;
print "$string\n";

이 구성은 perldoc -fjoin.

그러나 나는 항상 $,그것을 얼마나 간단 하게 만드는지 좋아 했습니다. 특수 변수 $"는 보간 용이고 특수 변수 $,는 목록 용입니다. 둘 중 하나를 동적 범위 제한 ' local' 과 결합 하여 스크립트 전체에 파급 효과가 발생하지 않도록합니다.

use 5.012_002;
use strict;
use warnings;

my @array = qw/ 1 2 3 4 5 /;

{
    local $" = ', ';
    print "@array\n"; # Interpolation.
}

또는 $ ,:

use feature q(say);
use strict;
use warnings;

my @array = qw/ 1 2 3 4 5 /;
{
    local $, = ', ';
    say @array; # List
}

특수 변수 $,perlvar에$" 문서화되어 있습니다. 키워드 및이 글로벌 문장 변수의 값을 변경의 효과를 제한하는 데 사용할 수있는 방법은 아마도 가장에 설명되어 perlsub .local

즐겨!


10

또한 Data :: Dumper 를 사용해 볼 수도 있습니다 . 예:

use Data::Dumper;

# simple procedural interface
print Dumper($foo, $bar);

4
Data :: Dumper는 표준 모듈이며 Perl과 함께 설치됩니다. 모든 표준 실용 및 모듈 목록을 보려면을 참조하십시오 pelrdoc perlmodlib.
shawnhcorey 2011

7

검사 / 디버깅을 위해 Data::Printer모듈을 확인하십시오 . 한 가지 일만 수행한다는 의미입니다.

화면에 Perl 변수와 개체를 적절하게 형식화하여 표시 (사람이 검사)

사용 예 :

use Data::Printer;  
p @array;  # no need to pass references

위의 코드는 다음과 같이 출력 할 수 있습니다 (색상 포함!) :

   [
       [0] "a",
       [1] "b",
       [2] undef,
       [3] "c",
   ]

Ubuntu에서 libdata-printer-perl패키지를 설치할 수 있습니다 .
planetp

3

간단하게 print할 수 있습니다 .

@a = qw(abc def hij);

print "@a";

당신은 얻을 것이다 :

abc def hij

1
쉼표는 배열의 각 요소에 있기 때문에 인쇄물에 있습니다. 당신은 정말로 선언 use warnings;하고 그것이 말하는 것을보아야합니다.
Toto

2
# better than Dumper --you're ready for the WWW....

use JSON::XS;
print encode_json \@some_array

1

사용 Data::Dumper:

use strict;
use Data::Dumper;

my $GRANTstr = 'SELECT, INSERT, UPDATE, DELETE, LOCK TABLES, EXECUTE, TRIGGER';
$GRANTstr    =~ s/, /,/g;
my @GRANTs   = split /,/ , $GRANTstr;

print Dumper(@GRANTs) . "===\n\n";

print Dumper(\@GRANTs) . "===\n\n";

print Data::Dumper->Dump([\@GRANTs], [qw(GRANTs)]);

세 가지 출력 스타일을 생성합니다.

$VAR1 = 'SELECT';
$VAR2 = 'INSERT';
$VAR3 = 'UPDATE';
$VAR4 = 'DELETE';
$VAR5 = 'LOCK TABLES';
$VAR6 = 'EXECUTE';
$VAR7 = 'TRIGGER';
===

$VAR1 = [
          'SELECT',
          'INSERT',
          'UPDATE',
          'DELETE',
          'LOCK TABLES',
          'EXECUTE',
          'TRIGGER'
        ];
===

$GRANTs = [
            'SELECT',
            'INSERT',
            'UPDATE',
            'DELETE',
            'LOCK TABLES',
            'EXECUTE',
            'TRIGGER'
          ];

1

이것은 당신이 찾고있는 것이 아닐 수도 있지만 여기에 내가 과제를 위해 한 일이 있습니다.

$" = ", ";
print "@ArrayName\n";

0

지도도 사용할 수 있지만 많은 일이 진행될 때 읽기가 어려울 때가 있습니다.

map{ print "element $_\n" }   @array; 

0

그래도 아래에서 실행하려고하지 않았습니다. 나는 이것이 까다로운 방법이라고 생각합니다.

map{print $_;} @array;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.