releasing/cbrtools/perl/Archive/Zip/Tree.pm
author Bob Rosenberg <bob.rosenberg@nokia.com>
Mon, 18 Oct 2010 10:33:54 +0100
changeset 660 66ff3e731c60
parent 602 3145852acc89
permissions -rw-r--r--
Sysdeftools additional support for merging misordered system definitions. More extensive validation. Minor bug fixes. Bash wrappers for perl scripts for unix installs.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
602
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
     1
# Copyright (c) 2000 Ned Konz. All rights reserved.  This program is free
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
     2
# software; you can redistribute it and/or modify it under the same terms
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
     3
# as Perl itself.
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
     4
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
     5
# $Revision: 1.5 $
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
     6
package Archive::Zip::Archive;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
     7
use File::Find ();
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
     8
use Archive::Zip qw(:ERROR_CODES :UTILITY_METHODS);
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
     9
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    10
=head1 NAME
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    11
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    12
Archive::Zip::Tree -- methods for adding/extracting trees using Archive::Zip
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    13
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    14
=head1 SYNOPSIS
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    15
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    16
  use Archive::Zip;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    17
  use Archive::Zip::Tree;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    18
  my $zip = Archive::Zip->new();
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    19
  # add all readable files and directories below . as xyz/*
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    20
  $zip->addTree( '.', 'xyz' );	
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    21
  # add all readable plain files below /abc as /def/*
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    22
  $zip->addTree( '/abc', '/def', sub { -f && -r } );	
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    23
  # add all .c files below /tmp as stuff/*
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    24
  $zip->addTreeMatching( '/tmp', 'stuff', '\.c$' );
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    25
  # add all .o files below /tmp as stuff/* if they aren't writable
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    26
  $zip->addTreeMatching( '/tmp', 'stuff', '\.o$', sub { ! -w } );
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    27
  # and write them into a file
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    28
  $zip->writeToFile('xxx.zip');
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    29
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    30
  # now extract the same files into /tmpx
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    31
  $zip->extractTree( 'stuff', '/tmpx' );
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    32
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    33
=head1 METHODS
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    34
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    35
=over 4
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    36
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    37
=item $zip->addTree( $root, $dest [,$pred] )
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    38
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    39
$root is the root of the tree of files and directories to be added
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    40
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    41
$dest is the name for the root in the zip file (undef or blank means to use
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    42
relative pathnames)
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    43
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    44
C<$pred> is an optional subroutine reference to select files: it is passed the
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    45
name of the prospective file or directory using C<$_>,
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    46
and if it returns true, the file or
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    47
directory will be included.  The default is to add all readable files and
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    48
directories.
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    49
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    50
For instance, using
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    51
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    52
  my $pred = sub { /\.txt/ };
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    53
  $zip->addTree( '.', '.', $pred );
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    54
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    55
will add all the .txt files in and below the current directory,
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    56
using relative names, and making the names identical in the zipfile:
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    57
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    58
  original name           zip member name
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    59
  ./xyz                   xyz
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    60
  ./a/                    a/
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    61
  ./a/b                   a/b
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    62
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    63
To use absolute pathnames, just pass them in:
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    64
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    65
$zip->addTree( '/a/b', '/a/b' );
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    66
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    67
  original name           zip member name
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    68
  /a/                     /a/
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    69
  /a/b                    /a/b
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    70
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    71
To translate relative to absolute pathnames, just pass them in:
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    72
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    73
$zip->addTree( '.', '/c/d' );
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    74
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    75
  original name           zip member name
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    76
  ./xyz                   /c/d/xyz
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    77
  ./a/                    /c/d/a/
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    78
  ./a/b                   /c/d/a/b
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    79
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    80
To translate absolute to relative pathnames, just pass them in:
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    81
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    82
$zip->addTree( '/c/d', 'a' );
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    83
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    84
  original name           zip member name
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    85
  /c/d/xyz                a/xyz
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    86
  /c/d/a/                 a/a/
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    87
  /c/d/a/b                a/a/b
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    88
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    89
Returns AZ_OK on success.
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    90
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    91
Note that this will not follow symbolic links to directories.
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    92
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    93
Note also that this does not check for the validity of filenames.
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    94
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    95
=back
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    96
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    97
=cut
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    98
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
    99
sub addTree
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   100
{
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   101
	my $self = shift;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   102
	my $root = shift or return _error("root arg missing in call to addTree()");
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   103
	my $dest = shift || '';
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   104
	my $pred = shift || sub { -r };
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   105
	$root =~ s{\\}{/}g;	# normalize backslashes in case user is misguided
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   106
	$root =~ s{([^/])$}{$1/};	# append slash if necessary
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   107
	$dest =~ s{([^/])$}{$1/} if $dest;	# append slash if necessary
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   108
	my @files;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   109
	File::Find::find( sub { push( @files, $File::Find::name ) }, $root );
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   110
	@files = grep { &$pred } @files;	# pass arg via local $_
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   111
	foreach my $fileName ( @files )
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   112
	{
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   113
		( my $archiveName = $fileName ) =~ s{^\Q$root}{$dest};
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   114
		$archiveName =~ s{^\./}{};
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   115
		next if $archiveName =~ m{^\.?/?$};	# skip current dir
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   116
		my $member = ( -d $fileName )
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   117
			? $self->addDirectory( $fileName, $archiveName )
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   118
			: $self->addFile( $fileName, $archiveName );
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   119
		return _error( "add $fileName failed in addTree()" ) if !$member;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   120
	}
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   121
	return AZ_OK;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   122
}
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   123
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   124
=over 4
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   125
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   126
=item $zip->addTreeMatching( $root, $dest, $pattern [,$pred] )
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   127
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   128
$root is the root of the tree of files and directories to be added
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   129
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   130
$dest is the name for the root in the zip file (undef means to use relative
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   131
pathnames)
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   132
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   133
$pattern is a (non-anchored) regular expression for filenames to match
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   134
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   135
$pred is an optional subroutine reference to select files: it is passed the
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   136
name of the prospective file or directory in C<$_>,
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   137
and if it returns true, the file or
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   138
directory will be included.  The default is to add all readable files and
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   139
directories.
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   140
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   141
To add all files in and below the current dirctory
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   142
whose names end in C<.pl>, and make them extract into a subdirectory
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   143
named C<xyz>, do this:
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   144
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   145
  $zip->addTreeMatching( '.', 'xyz', '\.pl$' )
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   146
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   147
To add all I<writable> files in and below the dirctory named C</abc>
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   148
whose names end in C<.pl>, and make them extract into a subdirectory
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   149
named C<xyz>, do this:
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   150
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   151
  $zip->addTreeMatching( '/abc', 'xyz', '\.pl$', sub { -w } )
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   152
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   153
Returns AZ_OK on success.
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   154
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   155
Note that this will not follow symbolic links to directories.
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   156
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   157
=back
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   158
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   159
=cut
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   160
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   161
sub addTreeMatching
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   162
{
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   163
	my $self = shift;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   164
	my $root = shift
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   165
		or return _error("root arg missing in call to addTreeMatching()");
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   166
	my $dest = shift || '';
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   167
	my $pattern = shift
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   168
		or return _error("pattern missing in call to addTreeMatching()");
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   169
	my $pred = shift || sub { -r };
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   170
	my $matcher = sub { m{$pattern} && &$pred };
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   171
	return $self->addTree( $root, $dest, $matcher );
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   172
}
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   173
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   174
=over 4
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   175
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   176
=item $zip->extractTree( $root, $dest )
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   177
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   178
Extracts all the members below a given root. Will
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   179
translate that root to a given dest pathname.
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   180
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   181
For instance,
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   182
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   183
   $zip->extractTree( '/a/', 'd/e/' );
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   184
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   185
when applied to a zip containing the files:
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   186
 /a/x /a/b/c /d/e
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   187
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   188
will extract:
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   189
 /a/x to d/e/x
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   190
 /a/b/c to d/e/b/c
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   191
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   192
and ignore /d/e
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   193
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   194
=back 
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   195
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   196
=cut
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   197
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   198
sub extractTree
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   199
{
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   200
	my $self = shift();
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   201
	my $root = shift();
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   202
	return _error("root arg missing in call to extractTree()")
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   203
		unless defined($root);
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   204
	my $dest = shift || '.';
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   205
	$root =~ s{\\}{/}g;	# normalize backslashes in case user is misguided
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   206
	$root =~ s{([^/])$}{$1/};	# append slash if necessary
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   207
	my @members = $self->membersMatching( "^$root" );
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   208
	foreach my $member ( @members )
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   209
	{
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   210
		my $fileName = $member->fileName(); 
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   211
		$fileName =~ s{$root}{$dest};
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   212
		my $status = $member->extractToFileNamed( $fileName );
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   213
		return $status if $status != AZ_OK;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   214
	}
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   215
	return AZ_OK;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   216
}
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   217
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   218
1;
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   219
__END__
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   220
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   221
=head1 AUTHOR
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   222
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   223
Ned Konz, perl@bike-nomad.com
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   224
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   225
=head1 COPYRIGHT
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   226
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   227
Copyright (c) 2000 Ned Konz. All rights reserved.  This program is free
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   228
software; you can redistribute it and/or modify it under the same terms
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   229
as Perl itself.
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   230
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   231
=head1 SEE ALSO
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   232
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   233
L<Compress::Zlib>
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   234
L<Archive::Zip>
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   235
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   236
=cut
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   237
3145852acc89 add releasing to new structure
jjkang
parents:
diff changeset
   238
# vim: ts=4 sw=4 columns=80