Inheritance in Perl


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Inheritance in Perl
# 1  
Old 04-17-2012
Inheritance in Perl

Code:
package Inventory_item;
    sub new {
        my($class) = shift;

        bless {
            "PART_NUM"    => undef,
            "QTY_ON_HAND" => undef
        }, $class;
    }

package main;
   $item = Inventory_item->new();

Can any one please help me in brief explaining the line
my($class) = shift What does it do and what is the significance. I have searched it over internet, bit i didn't get the clear picture
# 2  
Old 04-17-2012
Hi parthmittal2007,

shift extracts a value from the arguments of the function (@_) and assigns it to $class. The call Inventory_item->new() is the same as Inventory_item::new( "Inventory_item"), so the string will be the only argument to the function and will be assigned to the variable. After blessing it, $item will be an object with capabilities to call methods of that class.
# 3  
Old 04-17-2012
Code:
package Inventory_item;
  
    sub new {
        my($class) = shift;     
}         

sub declare
{
    my $abc = shift;
    print $abc;
}


package main;
 
  my  $item = Inventory_item->new();
  
  $item->declare(3);

I have done some thing like this, It is giving an error ,
The error is
Can't call method "declare" without a package or object reference at C:\Users\parth_mittal\Documents\test7.pl line 18.

But the syntax seems to be correct.
# 4  
Old 04-17-2012
You need to return a blessed reference from your new() method, see below for a very ugly adaptation of your class, then have a read through perldoc perlboot
Code:
#! /usr/bin/perl

use strict;
use warnings;

package Inventory_item;

sub new {
        my ($proto,%args) = @_;           # Make inheritable by checking what we were called as
        my $class = ref($proto) || $proto;# otherwise we cannot extend $class
        my $self = {};
        bless ($self, $class); # return a blessed reference
}

sub declare
{
    my ($self) = shift;
    my $arg= shift;
    $self->{'abc'}=$arg;
    print "$self->{'abc'} is set to $self->{'abc'}\n";

}

sub retrieve
{
    my ($self)=shift;
    my ($param)=shift;
    if (! defined $self->{$param}){
        die ("No such field $param\n");
    }
    else{
        print "$param is set to $self->{$param}\n";

    }
}
package main;

my  $item = Inventory_item->new();
$item->declare(3);
$item->retrieve('abc');

# 5  
Old 04-18-2012
Hi
What does this signify
Code:
%{"check"} =     
    (header    => [
      #      name                    length  Justify        Field Name in spreadsheet
        qw( _RECORD_ID                     3   1),    #   010-RECORD-ID - (010)         
        qw( M_OR_H                         1   1),    #   010-M-OR-H                    
        qw( SENDER_ID                      4   1),    #   010-SENDER-ID                 
        qw( RESOLVED_DIVISION              5   1),    #   010-RESOLVED-DIVISION         
        qw( DIRECTION                      1   1),    #   010-DIRECTION (I/O)           
        qw( DOCUMENT_TYPE                  3   1),    #   010-DOCUMENT-TYPE           
        qw( RESERVED                       1   1),    #   010-RESERVED                  
        qw( IS_PAPER                       1   1),    #   010-IS-PAPER
        ]);

# 6  
Old 04-18-2012
%{"check"} never a good sign that, if you have an indexed array (hash) format available natively creating variables from strings is a BAD idea.

This creates a hash (%check) with a single field ($check{header}) the value of which is a pointer to an anonymous array of header item specifications.

How does this relate to your original question?
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. Programming

What is wrong with below python inheritance code?

I am using python 3.4. Below is the exception I am getting- Traceback (most recent call last): File "./oop.py", line 20, in <module> y = DerivedClass("Manu") File "./oop.py", line 15, in __init__ super().__init__(self,value) TypeError: __init__() takes 2 positional arguments but... (2 Replies)
Discussion started by: Tanu
2 Replies

2. Programming

Size of derived class, in case of multiple inheritance

Why, here the size of class 'Derived' is 8 ? class Base1 { public: virtual void f() { } }; class Base2 { public: virtual void f() { } }; class Derived : public Base1, Base2 { public: virtual void f() { } }; (1 Reply)
Discussion started by: techmonk
1 Replies

3. Red Hat

Ulimit Inheritance

Hi , If i start mysqld or httpd as root user which inturn starts them as "mysql" or "apache" user, will the ulimit of "root" user or ulimit of "mysql/apache" user be set for the mysql/apache processes. My understanding is that the ulimit of the user who initiates the process(root in this... (2 Replies)
Discussion started by: Hari_Ganesh
2 Replies

4. Programming

Difference in multiple inheritance and multilevel inheritance: same method name ambiguity problem

Hi, In multi-level inheritance: class A { public: void fun() { cout << "A" << endl; } }; class B : public A { public: void fun() { cout << "A" << endl; } }; class C : public B { }; int main() { C c; c.fun(); // Ans: A } (1 Reply)
Discussion started by: royalibrahim
1 Replies

5. Programming

Inheritance

whats the use of inheriting with access specifier as private..? Please specify the answer with a simple example... Regards -- Madhu (5 Replies)
Discussion started by: MadhuM
5 Replies

6. Programming

C++ Inheritance problem??????

Hi friends, I hope u people are ok and doing fine. I have this small problem with the derived class. I have created te base class and there is a small problem with the definition of the derived class which the compiler is pointing out, could you please help me. Here is my code #ifndef... (2 Replies)
Discussion started by: gabam
2 Replies

7. AIX

WLM inheritance

Is none of you using WLM? A search gives no matches.... Anyway, I have set up a class with inheritance = yes. In the rules characteristics I have chosen a shell script as an application. This script is caught by the class, but not the child processes, which have the PID of the script as the... (6 Replies)
Discussion started by: firefox111
6 Replies

8. Shell Programming and Scripting

Makefile: Parent - Child Inheritance and export

Hi, I have a number of Makefiles, including a couple of files that I include in Makefiles, a few scripts that are executed through Makefiles, and I have problems with environment variables that are not inherited to the scripts properly. Simplified scenario: rootdir/Makefile: all: ... (1 Reply)
Discussion started by: Shompis
1 Replies

9. Shell Programming and Scripting

perl - variable inheritance

Hey Everyone, Does anyone know how - or if it's even possible - for a child perl script to inherit the variables of a parent perl script? In a shell script, you would use "export" for example. I am running Perl 5.8. Basically, let's say "perl1.pl" calls "perl2.pl" and I want "perl2.pl" to... (2 Replies)
Discussion started by: gsatch
2 Replies
Login or Register to Ask a Question