I would be very thankful if you explain bit clearly! Thanks u in advance

No wonder you're having a hard time understand this; it's some of the most badly written Perl I have ever seen. (That means don't emulate them.)

1) ($Progrm_name=$0)=~s@^.*/@@;

$0 is the path to the script. This is to get its name without any leading directories. A better way is:

use File::Basename; $Progrm_name = basename( $0 );

2) $chipcore = shift if $arg = /^chipcore//

This won't pass the Perl compiler. Perhaps you mistyped it? I think it should be:

$chipcore = shift @ARGV if $arg =~ /^chipcore/;

or:

$chipcore = shift @_ if $arg =~ /^chipcore/;

Which one depends on if it's in a sub or not. Always add the array to a shift so its meaning is clear.

3)$xml_utils::verbose = $verbose;

$xml_utils::verbose is a fully-qualified variable name. Fully-qualified variables consist of their package, two colons and their name. It also must be a global, introduced with `our` or `use vars...` By convention, all packages should start with a capital letter, like: