[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [Libguestfs] [PATCH] Export inspect_linux_kernel in Lib.pm



On 19/08/09 15:18, Jim Meyering wrote:
Matthew Booth wrote:
diff --git a/perl/lib/Sys/Guestfs/Lib.pm b/perl/lib/Sys/Guestfs/Lib.pm
...
@@ -1551,10 +1552,19 @@ sub _check_for_kernels
...
                  # Check the kernel was recognised
                  if(defined($kernel)) {
+                    # Put this kernel on the top level kernel list
+                    my $kernels = $os->{kernels};
+                    if(!defined($kernels)) {
+                        $kernels = [];
+                        $os->{kernels} = $kernels;
+                    }
+                    push(@$kernels, $kernel);
+

Hi Matt,

It took me too long to see what was being done above,
so I rewrote it in a way that I found easier to read:

How about this?

diff --git a/perl/lib/Sys/Guestfs/Lib.pm b/perl/lib/Sys/Guestfs/Lib.pm
index dfa79af..2acdec6 100644
--- a/perl/lib/Sys/Guestfs/Lib.pm
+++ b/perl/lib/Sys/Guestfs/Lib.pm
@@ -1558,12 +1558,8 @@ sub _check_for_kernels
                  # Check the kernel was recognised
                  if(defined($kernel)) {
                      # Put this kernel on the top level kernel list
-                    my $kernels = $os->{kernels};
-                    if(!defined($kernels)) {
-                        $kernels = [];
-                        $os->{kernels} = $kernels;
-                    }
-                    push(@$kernels, $kernel);
+                    $os->{kernels} ||= [];
+                    push(@{$os->{kernels}}, $kernel);

                      $config{kernel} = $kernel;


The ||= operator may look odd, but it's another of these idiom things.
Once you see it a few times, then "get it", and start using it,
you'll never go back.

Which would you prefer to read/maintain?  This:

     # Ensure the array-ref is initialized.
     if (!defined $some_long_name->[$some_complicated_expression]) {
         $some_long_name->[$some_complicated_expression] = [];
     }

     # Append to it.
     ...

or this:

     # Ensure the array-ref is initialized.
     $some_long_name->[$some_complicated_expression] ||= [];

     # Append to it.
     ...

I haven't come across that idiom, and I like it. However, I've already pushed this patch now and I'm not sure it merits its own revision given the number of other places I could make the same change.

I suggest making this change over time as code is touched.

Matt
--
Matthew Booth, RHCA, RHCSS
Red Hat Engineering, Virtualisation Team

M:       +44 (0)7977 267231
GPG ID:  D33C3490
GPG FPR: 3733 612D 2D05 5458 8A8A 1600 3441 EA19 D33C 3490


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]