in reply to Library file or module for sharing code?

For good or ill, I use the first style, although I do invoke the subs from the common file via their package name (to provide that absolute path/specificity). I use a short name for the package to keep that chunk from using too much space horizontally when I invoke the sub, as in:

SCRIPT 1

#!/usr/bin/perl use warnings; use strict; use CGI::Carp qw(fatalsToBrowser); require "common.lib"; my $name = "frodo"; $name = cm::get_uppercase($name);
COMMON 1

package cm; sub get_uppercase { my $name = shift; return uc($name); } 1;

At distribution time I run a utility script that makes a single file in which I stick
 package main;
in as the first effective line of my script and then appends the various 'require' files to the 'sendout' file so that my users only deal with one file. (The utility also deletes the original 'require' lines from the main section.) I do a few other things, too, to the 'sendout' file....