Końcowy przecinek w Perl liście

Elementy na liście w języku programowania Perl są oddzielone za pomocą operatora przecinek ,. Oto przykład kodu, który tworzy tablicę w którym znajduje się 3 elementy:

▶ Run
#!/usr/bin/perl

my @arr = ('one', 'two', 'three');

Perl, w odróżnieniu od, na przykład, JSON pozwala określić przecinek na końcu listy. Ten kod tworzy dokładnie taka sama tablica jak w poprzednim przykładzie:

▶ Run
#!/usr/bin/perl

my @arr = ('one', 'two', 'three',);

Ten masyw składa się z trzech elementów. To co w końcu jest przecinek na nic nie wpływa. Można było gdyby założyć, że przecinek na końcu listy doda undef jako ostatni wartości, ale nie, tego się nie dzieje. Czy przecinek na końcu listy, czy nie — nie ma to wpływu to jak Perl interpretuje tę listę.

Rekomendacja

Języka programowania Perl i tak — czy w liście końcowy przecinek, czy nie, ale programy piszemy nie tylko po to, aby je rozumiał Perl, ale aby je rozumieli ludzie. Dlatego są następujące zalecenie, jeśli jej przestrzegać, to kod staje się odrobinę łatwiejsze do odczytania i trochę łatwiej zmieniać.

Zalecenia są następujące:

  • jeśli lista jest zapisany w wierszu, to ostatecznym przecinka być nie powinno
  • jeśli każdy element listy jest zapisany w osobnym wierszu, to po ostatnim elementem powinien być przecinek

Z tego zalecenia należy, że

  • jeśli w trakcie pracy lista się zmienia, wcześniej był zapisany w jednej linii, a został nagrany przez wartość w wierszu, to trzeba dodać końcowy przecinek
  • a jeśli z wielowierszowego listy tworzy listę w jedną linię, to końcowy przecinek trzeba usunąć

Oto przykład kodu, w którym przestrzegane zalecenie:

▶ Run
#!/usr/bin/perl

my @arr1 = ('one', 'two', 'three');

my @arr2 = (
    'one',
    'two',
    'three',
);

my %h = (
    a => 1,
    b => 2,
);

Jeśli na liście, każdy element, który jest zapisany w wierszu nie ma oczywiście przecinkiem i trzeba dodać jeszcze jeden element na końcu listy, to w diff będzie składać się z jednego zdalnego polecenia i dwóch dodanych:

diff --git a/script.pl b/script.pl
index 5634af0..eabe2f1 100644
--- a/script.pl
+++ b/script.pl
@@ -3,5 +3,6 @@
 my @arr = (
     'one',
     'two',
-    'three'
+    'three',
+    'four'
 );

Jeśli rekomendacja przestrzegane i w końcu takiej listy jest ostatecznym przecinek, to diff składa się z jednej zrozumiały wiersz:

diff --git a/script.pl b/script.pl
index 8575677..82b3adf 100644
--- a/script.pl
+++ b/script.pl
@@ -4,4 +4,5 @@ my @arr = (
     'one',
     'two',
     'three',
+    'four',
 );

Inne artykuły