I was given a perl program today, however running on my Fedora Core 5 install gave me the following error.
$ ./nameofcommand Can't locate Term/ReadKey.pm in @INC (@INC contains: /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.7/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.6/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.4/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.3/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl/5.8.7 /usr/lib/perl5/site_perl/5.8.6 /usr/lib/perl5/site_perl/5.8.5 /usr/lib/perl5/site_perl/5.8.4 /usr/lib/perl5/site_perl/5.8.3 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.7/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.6/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.5/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.4/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.3/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl/5.8.7 /usr/lib/perl5/vendor_perl/5.8.6 /usr/lib/perl5/vendor_perl/5.8.5 /usr/lib/perl5/vendor_perl/5.8.4 /usr/lib/perl5/vendor_perl/5.8.3 /usr/lib/perl5/vendor_perl /usr/lib/perl5/5.8.8/i386-linux-thread-multi /usr/lib/perl5/5.8.8 .) at ./nameofcommand line 28.
A quick check of the things I know about Perl.
$ rpm -qa | grep perl perl-Digest-HMAC-1.01-14.2 perl-XML-Parser-2.34-6.1.2.2 perl-DBI-1.50-2.2 perl-Digest-SHA1-2.11-1.2 perl-URI-1.35-2.2 perl-Compress-Zlib-1.41-1.2.2 perl-HTML-Parser-3.51-1.FC5 perl-5.8.8-5 perl-Net-DNS-0.57-1 perl-HTML-Tagset-3.10-2.1 perl-Net-IP-1.25-1.fc5 perl-libwww-perl-5.805-1.1 perl-SGMLSpm-1.03ii-16.2 perl-String-CRC32-1.4-1.FC5 $ perl --version This is perl, v5.8.8 built for i386-linux-thread-multi $ cpan Term/ReadKey Going to read /root/.cpan/sources/authors/01mailrc.txt.gz CPAN: Compress::Zlib loaded ok Going to read /root/.cpan/sources/modules/02packages.details.txt.gz Database was generated on Thu, 31 Aug 2006 11:32:19 GMT CPAN: HTTP::Date loaded ok There's a new CPAN.pm version (v1.87) available! [Current version is v1.7602] You might want to try install Bundle::CPAN reload cpan without quitting the current session. It should be a seamless upgrade while we are running... Going to read /root/.cpan/sources/modules/03modlist.data.gz CPAN: Storable loaded ok Going to write /root/.cpan/Metadata Running make for T/T//T/Te/Term/ReadKey CPAN: LWP::UserAgent loaded ok Fetching with LWP: http://cpan.mirrors.ilisys.com.au/authors/id/T/T//T/Te/Term/ReadKey Fetching with LWP: http://cpan.mirrors.ilisys.com.au/authors/id/T/T//T/Te/Term/ReadKey.gz Trying with "/usr/bin/links -source" to get http://cpan.mirrors.ilisys.com.au/authors/id/T/T//T/Te/Term/ReadKey CPAN: Digest::MD5 loaded ok Trying with "/usr/bin/links -source" to get http://cpan.mirrors.ilisys.com.au/authors/id/T/T//T/Te/Term/CHECKSUMS 'glob' trapped by operation mask at (eval 25) line 1. at /usr/lib/perl5/5.8.8/CPAN.pm line 4265 CPAN::Distribution::MD5_check_file('CPAN::Distribution=HASH(0xaeee4d4)', '/root/.cpan/sources/authors/id/T/T/T/Te/Term/CHECKSUMS') called at /usr/lib/perl5/5.8.8/CPAN.pm line 4246 CPAN::Distribution::verifyMD5('CPAN::Distribution=HASH(0xaeee4d4)') called at /usr/lib/perl5/5.8.8/CPAN.pm line 3894 CPAN::Distribution::get('CPAN::Distribution=HASH(0xaeee4d4)') called at /usr/lib/perl5/5.8.8/CPAN.pm line 4463 CPAN::Distribution::make('CPAN::Distribution=HASH(0xaeee4d4)') called at /usr/lib/perl5/5.8.8/CPAN.pm line 4703 CPAN::Distribution::test('CPAN::Distribution=HASH(0xaeee4d4)') called at /usr/lib/perl5/5.8.8/CPAN.pm line 4808 CPAN::Distribution::install('CPAN::Distribution=HASH(0xaeee4d4)') called at /usr/lib/perl5/5.8.8/CPAN.pm line 2137 CPAN::Shell::rematein('CPAN::Shell', 'install', 'Term/ReadKey') called at /usr/lib/perl5/5.8.8/CPAN.pm line 2164 CPAN::Shell::install('CPAN::Shell', 'Term/ReadKey') called at /usr/bin/cpan line 202
Time to IM my friend and Perl expert Tony. I can obviously read Perl ok, have even worked with Perl CGI many many years ago, but this will be some configuration syntax I’m just not familar with because I don’t develop in Perl.
In summary,Tony’s (Mr Perl for today) tips we:
- perl -e ‘for (@INC) { printf “%d %sn”, $i++, $_} ‘
- PERL5LIB env variable
- or -I command line switch, syntax is -Idirlist dirlist is a colon-separated list of one or more directories to INC
- but it might need term::readkey perl uses keyword :: package or similar
And indeed it was the syntax. Now some enterprising perl person could rather then just saying Can’t locate Term/ReadKey.pm , could add try cpan Term::ReadKey to install this package.
$ cpan Term::ReadKey CPAN: Storable loaded ok Going to read /root/.cpan/Metadata Database was generated on Thu, 31 Aug 2006 11:32:19 GMT Running install for module Term::ReadKey Running make for J/JS/JSTOWE/TermReadKey-2.30.tar.gz CPAN: LWP::UserAgent loaded ok Fetching with LWP: http://cpan.mirrors.ilisys.com.au/authors/id/J/JS/JSTOWE/TermReadKey-2.30.tar.gz CPAN: Digest::MD5 loaded ok Fetching with LWP: http://cpan.mirrors.ilisys.com.au/authors/id/J/JS/JSTOWE/CHECKSUMS Checksum for /root/.cpan/sources/authors/id/J/JS/JSTOWE/TermReadKey-2.30.tar.gz ok Scanning cache /root/.cpan/build for sizes TermReadKey-2.30/ TermReadKey-2.30/genchars.pl TermReadKey-2.30/Makefile.PL TermReadKey-2.30/Configure.pm TermReadKey-2.30/test.pl TermReadKey-2.30/ReadKey.pm TermReadKey-2.30/META.yml TermReadKey-2.30/ReadKey.xs TermReadKey-2.30/ppport.h TermReadKey-2.30/MANIFEST TermReadKey-2.30/README CPAN.pm: Going to build J/JS/JSTOWE/TermReadKey-2.30.tar.gz Checking if your kit is complete... Looks good Writing Makefile for Term::ReadKey cp ReadKey.pm blib/lib/Term/ReadKey.pm AutoSplitting blib/lib/Term/ReadKey.pm (blib/lib/auto/Term/ReadKey) /usr/bin/perl -I/usr/lib/perl5/5.8.8 genchars.pl Writing termio/termios section of cchars.h... Done. Checking for sgtty... Sgtty NOT found. Writing sgtty section of cchars.h... Done. /usr/bin/perl /usr/lib/perl5/5.8.8/ExtUtils/xsubpp -noprototypes -typemap /usr/lib/perl5/5.8.8/ExtUtils/typemap ReadKey.xs > ReadKey.xsc && mv ReadKey.xsc ReadKey.c gcc -c -D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -Wdeclaration-after-statement -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/include/gdbm -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables -DVERSION="2.30" -DXS_VERSION="2.30" -fPIC "-I/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE" ReadKey.c In file included from ReadKey.xs:6: ppport.h:230:1: warning: "PERL_UNUSED_DECL" redefined In file included from ReadKey.xs:4: /usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/perl.h:163:1: warning: this is the location of the previous definition In file included from ReadKey.xs:375: cchars.h: In function ‘XS_Term__ReadKey_GetControlChars’: cchars.h:244: warning: unused variable ‘i’ ReadKey.xs: In function ‘ReadMode’: ReadKey.xs:770: warning: unused variable ‘Perl___notused’ ReadKey.c: In function ‘XS_Term__ReadKey_SetTerminalSize’: ReadKey.c:1999: warning: unused variable ‘targ’ Running Mkbootstrap for Term::ReadKey () chmod 644 ReadKey.bs rm -f blib/arch/auto/Term/ReadKey/ReadKey.so gcc -shared -L/usr/local/lib ReadKey.o -o blib/arch/auto/Term/ReadKey/ReadKey.so chmod 755 blib/arch/auto/Term/ReadKey/ReadKey.so cp ReadKey.bs blib/arch/auto/Term/ReadKey/ReadKey.bs chmod 644 blib/arch/auto/Term/ReadKey/ReadKey.bs Manifying blib/man3/Term::ReadKey.3pm /usr/bin/make -- OK Running make test PERL_DL_NONLAZY=1 /usr/bin/perl "-Iblib/lib" "-Iblib/arch" -w test.pl 1 .. 8 ok 1 ok 2 ok 3 ok 4 ok 5 ok 6 ok 7 ok 8 /usr/bin/make test -- OK Running make install Installing /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/auto/Term/ReadKey/ReadKey.so Installing /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/auto/Term/ReadKey/ReadKey.bs Files found in blib/arch: installing files in blib/lib into architecture dependent library tree Installing /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/auto/Term/ReadKey/autosplit.ix Installing /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/Term/ReadKey.pm Installing /usr/share/man/man3/Term::ReadKey.3pm Writing /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/auto/Term/ReadKey/.packlist Appending installation info to /usr/lib/perl5/5.8.8/i386-linux-thread-multi/perllocal.pod /usr/bin/make install -- OK