Separate accessor and loader.
authorMikko Värri <vmj@linuxbox.fi>
Tue, 27 Sep 2011 00:20:29 +0000 (03:20 +0300)
committerMikko Värri <vmj@linuxbox.fi>
Tue, 27 Sep 2011 00:20:29 +0000 (03:20 +0300)
lib/Slackware/File.pm

index 44435c7..4598625 100644 (file)
@@ -69,15 +69,28 @@ for my $attr ( qw( name ) ) {
     }
 }
 
+# Read-only accessors
+#
+#
+for my $attr ( qw( type ) ) {
+    no strict 'refs';
+    *{"Slackware::File::$attr"} = sub {
+        my $self = shift;
+        return $self->{$attr} if defined $self->{$attr};
+        my $loader = "load_$attr";
+        $self->$loader();
+        return $self->{$attr};
+    }
+}
+
 sub is_dir {
     my $self = shift;
     return 1 if $self->{name} =~ m[/$];
     return 0;
 }
 
-sub type {
+sub load_type {
     my $self = shift;
-    return $self->{type} if defined $self->{type};
     return undef unless $self->exists();
     my $fsname = $self->{fsname};
     my $type = `file --brief --no-dereference --preserve-date --uncompress $fsname`;