Beefy Boxes and Bandwidth Generously Provided by pair Networks
We don't bite newbies here... much
 
PerlMonks  

Seekers of Perl Wisdom

( #479=superdoc: print w/replies, xml ) Need Help??

If you have a question on how to do something in Perl, or you need a Perl solution to an actual real-life problem, or you're unsure why something you've tried just isn't working... then this section is the place to ask. Post a new question!

However, you might consider asking in the chatterbox first (if you're a registered user). The response time tends to be quicker, and if it turns out that the problem/solutions are too much for the cb to handle, the kind monks will be sure to direct you here.

User Questions
merge multiple files giving out of memory error
No replies — Read more | Post response
by Anonymous Monk
on Feb 24, 2017 at 03:42
    I have multiple files with NGS reads with two columns. The first column contains reads and the second contains the count of that particular read in that file. The files are tab delimited
    eg: file1 @ns ATTGCGTTC + //#$@TMSQ 2 @ns GGAGCGTTC + //#$@TMSQ 3
    file2 @ns ATTGCGTTC + //#$@#//A 1
    output: @ns ATTGCGTTC + //#$@TMSQ 2 1 count:3 @ns GGAGCGTTC + //#$@TMSQ 3 count:3
    The program should give the count if second line of each read matches. I have written the following code for this. THe code is working perfectly well but consumes large amount of memory. When I tried the codes for huge files it hangs with no output. Can anyone modify my code so that minimum memory is used.
    #!/usr/bin/env perl use strict; use warnings; no warnings qw( numeric ); my %seen; $/ = ""; while (<>) { chomp; my ($key, $value) = split ('\t', $_); my @lines = split /\n/, $key; my $key1 = $lines[1]; $seen{$key1} //= [ $key ]; push (@{$seen{$key1}}, $value); } foreach my $key1 ( sort keys %seen ) { my $tot = 0; my $file_count = @ARGV; for my $val ( @{$seen{$key1}} ) { $tot += ( split /:/, $val )[0]; } if ( @{ $seen{$key1} } >= $file_count) { print join( "\t", @{$seen{$key1}}); print "\tcount:". $tot."\n\n"; } }
Regex: What does ?k: mean?
1 direct reply — Read more / Contribute
by hoppfrosch
on Feb 24, 2017 at 02:39
    Looking through various Regexp::Common submodules, I very often saw the usage of "?k:" within regex definitions:
    # from Regexp::Common::Comment: sub to_eol ($) {"(?k:(?k:$_[0])(?k:[^\\n]*)(?k:\\n))"} # from Regexp::Common::ZIP Monaco => "(?k:980[0-9][0-9])",
    (much more examples could be given)
    Can anybody tell me what's the function of "?k:" within regexes? Haven't found anything enlightening yet.

    TIA
put a newline character after every four lines in a file
1 direct reply — Read more / Contribute
by Anonymous Monk
on Feb 24, 2017 at 01:05
    I have multiple files in which I want to insert newline after every four lines. I know I can do it with sed but I want to do the same in perl. I have tried the following code:
    use strict; use warnings; my @files= @ARGV; for my $input_file (@files) { system "sed -i '0~4 s/\$/\n/g' $input_file"; }
    when I substitute it with any string it is done but when I am inserting newline as in above code it is giving error. I don't want to do it with sed as I know sed works only in linux. If someone can help me to insert a newline after every four lines using perl and not sed.
more elegant way to parse this?
1 direct reply — Read more / Contribute
by morgon
on Feb 23, 2017 at 23:58
    Hi,

    on OpenWrt I try to find out about visible wifi-networks by parsing the output of iw scan.

    This output looks like this:

    BSS <blah blah> SSID: <ssid> <blah blah> BSS <and so on>
    What I am interested in is the set of all ssids, each being contained in a stanza that starts with "BSS" and ends when the next "BSS" is encountered.

    So I parse it like this:

    my $out = qx| sudo iw dev wlan0 scan |; $out .= "\nBSS"; my @chunks = $out =~ /^(BSS.*?)(?=^BSS)/smg; my @essids = map { /SSID: (.*?)$/ms; $1 } @chunks;
    And that works, but it bugs me that I manually add a "synthetic" BSS to the output of iw so I can then use a lookahead in the regex that would also match on the last entry.

    So I wonder: Is there a more elegant way to do this?

    Many thanks!

Switch.pm Failure
3 direct replies — Read more / Contribute
by tultalk
on Feb 23, 2017 at 21:29

    Hi: New here. Code: use CGI::Switch; and

    Main(); sub Main { my $action = $query->param('action'); switch { warn("manage_users.cgi line 54 '$action'"); #Request from User for Login Form ($action eq "GetLoginForm") && do { manageusers::OpenConnection();

    Debugger fails: Can't call method switch without a package or object reference. Verified Switch.pm is in path and it does not fail on use CGI::Switch; Thanks and best regards

Merging two files
1 direct reply — Read more / Contribute
by arshadmehmood118
on Feb 23, 2017 at 20:54

    Dear experts, I am a new learner of Perl. I want extract some information from my output files of my calculations. I have written the following script:

    #!/usr/bin/perl # 2017.02.07 # Compare Qc and Dc of gold atoms use strict; open(F1,">SI.txt"); open(F2,">SI2.txt"); print F2 "\n\n\n============================ Computed geometries (Cartesian coordinates in Angstrom), total energie +s (Hartree), Hirshfeld population QA(e) and atomic overlap distances DA(bohr) of a +ll systems given in Table SI-1 and Table SI-2. \n\n"; print F1 "\n\n\n========================== Computed Q(Au) and D(Au) of all atoms in all neutral Au clusters \n\n" +; print F1 " Atom QA DA(alpha) DA(beta) DA(total)\n"; foreach my $f(<*log>){ my $c=`grep -c "Normal term" $f`;chomp($c); my $E=`tac $f|grep -m1 "SCF Done"|awk "{print \\\$5}"`; chomp( +$E); my $Nat = `cat $f|grep -m1 "NAtoms="|awk "{print \\\$2}" `; ch +omp($Nat); my $off=$Nat+4; my $coord=`tac $f|grep -m1 -B$off " orientation:"|head + -n$Nat|tac|awk -v OFS='\t' "{print\\\$1,\\\$2,\\\$4,\\\$5,\\\$6}"`; print F2 "Molecule $f \nEnergy: $E\nGeometry:\nAtom A +tomic No. x y z\n $coord Atom +QA DA(alpha) DA(beta) DA(total)\n"; foreach my $at(1..$Nat){ my $at2=$at+1; # Get the Hirshfeld populations and atomic del +ocalziations my $QA = `tac $f|grep -m1 -B$at2 "Hirshfeld ch +arges, spin" | head -n1|awk "{print \\\$3}"`;chomp($QA); my $dalpha=`tac $f|grep -m1 -B$at2 "Atomic ave +rage delocal" |head -n1 |awk "{print \\\$3}"`; chomp($dalpha); my $dbeta=`tac $f|grep -m1 -B$at2 "Atomic aver +age delocal" |head -n1 |awk "{print \\\$4}"`; chomp($dbeta); my $dtotal=`tac $f|grep -m1 -B$at2 "Atomic ave +rage delocal" |head -n1 |awk "{print \\\$5}"`; chomp($dtotal); print F1 sprintf(" %4d %7.4f %7.4f + %7.4f %7.4f \n",$at,$QA,$dalpha,$dbeta,$dtotal); } } close(F1); close(F2);

    Using my limited knowledge of Perl, I have successfully extracted what I want from my output files in two files SI.txt and SI2.txt. But I want to combine information about each molecule in one file. I don't know how to write script that combines the information into one file. File SI.txt gives me:

    Atom QA DA(alpha) DA(beta) DA(total) 1 1.0000 2.2238 2.6173 2.3812 1 1.3294 1.9996 1.9996 1.9996 2 -0.1098 2.2233 2.2233 2.2233 3 -0.1098 2.2233 2.2233 2.2233 4 -0.1098 2.2233 2.2233 2.2233

    and File SI2.txt gives me:

    Molecule 01-Carbon-Energy.log Energy: -37.7131454546 Geometry: Atom Atomic No. x y z 1 6 0.000000 0.000000 0.000000 Atom QA DA(alpha) DA(beta) DA(total) Molecule 02-Methanide-Geometry.log Energy: -39.6946868929 Geometry: Atom Atomic No. x y z 1 6 0.000000 0.000000 0.000000 2 1 0.000000 1.084453 0.000000 3 1 -0.939164 -0.542227 0.000000 4 1 0.939164 -0.542227 0.000000 Atom QA DA(alpha) DA(beta) DA(total)

    But this is what I want:

    Molecule 01-Carbon-Energy.log Energy: -37.7131454546 Geometry: Atom Atomic No. x y z 1 6 0.000000 0.000000 0.000000 Atom QA DA(alpha) DA(beta) DA(total) 1 1.0000 2.2238 2.6173 2.3812 Molecule 02-Methanide-Geometry.log Energy: -39.6946868929 Geometry: Atom Atomic No. x y z 1 6 0.000000 0.000000 0.000000 2 1 0.000000 1.084453 0.000000 3 1 -0.939164 -0.542227 0.000000 4 1 0.939164 -0.542227 0.000000 Atom QA DA(alpha) DA(beta) DA(total) 1 1.3294 1.9996 1.9996 1.9996 2 -0.1098 2.2233 2.2233 2.2233 3 -0.1098 2.2233 2.2233 2.2233 4 -0.1098 2.2233 2.2233 2.2233

    Please help me, if possible. I shall be very much thankful

Why doesn't 'system' return '-1' when a program fails to start on Windows?
2 direct replies — Read more / Contribute
by jkahrman
on Feb 23, 2017 at 19:49
    My reading of 'perldoc -f system', 'perldoc -f exec', 'perldoc perlport' (system, exec, and wait sections), and 'perldoc perlvar' ($? section) lead me to expect a '-1' error code from system when the program to launch is not found (fails to launch).

    The following returns -1 on Unix,

    DB<5> x (system 'jxdDoesNotExist'), $?, $! Can't exec "jxdDoesNotExist": No such file or directory at 0 '-1' 1 '-1' 2 'No such file or directory'
    As does this:
    DB<7> x (system {'jxdDoesNotExist'} 'jxdDoesNotExist'), $?, $! Can't exec "jxdDoesNotExist": No such file or directory at 0 '-1' 1 '-1' 2 'No such file or directory'
    But on Windows...
    DB<3> x (system {'jxdDoesNotExist'} 'jxdDoesNotExist'), $?, $!, $^E 0 65280 1 65280 2 'No such file or directory' 3 'The system cannot find the file specified' DB<4> x (system 'jxdDoesNotExist'), $?, $!, $^E 'jxdDoesNotExist' is not recognized as an internal or external command +, operable program or batch file. 0 256 1 256 2 'No such file or directory' 3 'Access is denied'
    The second Windows 'system' call makes some sense (the error code is from cmd.exe), based on the following snippet from 'perldoc -f system':
                ... On Windows, only the "system PROGRAM
                LIST" syntax will reliably avoid using the shell; "system LIST",
                even with more than one element, will fall back to the shell if
                the first spawn fails.
    
    and from 'perlport'
        exec    "exec LIST" without the use of indirect object syntax ("exec
                PROGRAM LIST") may fall back to trying the shell if the first
                spawn() fails. (Win32)
    
    combined with this snippet from 'perldoc -f system':
                Like "exec", "system" allows you to lie to a program about its
                name if you use the "system PROGRAM LIST" syntax. Again, see
                "exec".
    
    But the 65280 code from the Windows "system PROGRAM LIST" syntax perplexes me. If perl knows the command failed to launch, shouldn't system return '-1' (as documented!!!) ?

    See also rt//46333 and rt//95308, which led me to this question

WWW-Mechanize-Firefox install issue
2 direct replies — Read more / Contribute
by Anonymous Monk
on Feb 23, 2017 at 19:13

    Hi,
    I am trying to install the WWW-Mechanize-Firefox
    module and it is failing. Not sure why. Any help is
    greatly appreciated. This is being installed on
    windows. Here is the install text


    C:\Perl_Programs>perl -MCPAN -e shell

    There seems to be running another CPAN process (pid 31832). Contacting...
    Other job not responding. Shall I overwrite the lockfile 'C:\Perl64\cpan\.lock'? (Y/n) y y
    cpan shell -- CPAN exploration and modules installation (v2.1101)
    Enter 'h' for help.
    cpan> install WWW::Mechanize::Firefox
    Reading 'C:\Perl64\cpan\Metadata'
    Database was generated on Thu, 23 Feb 2017 06:17:02 GMT
    Running install for module 'WWW::Mechanize::Firefox'
    Checksum for C:\Perl64\cpan\sources\authors\id\C\CO\CORION\WWW-Mechanize-Firefox-0.79.tar.gz ok
    Scanning cache C:\Perl64/cpan/build for sizes
    ........................................................--------------------DONE
    DEL(1/17): C:\Perl64\cpan\build\Template-Toolkit-2.26-1QMdzA
    DEL(2/17): C:\Perl64\cpan\build\Template-Toolkit-2.26-1QMdzA.yml
    DEL(3/17): C:\Perl64\cpan\build\Text-SimpleTable-2.03-XS8vjv
    DEL(4/17): C:\Perl64\cpan\build\Text-SimpleTable-2.03-XS8vjv.yml
    DEL(5/17): C:\Perl64\cpan\build\UNIVERSAL-require-0.18-NYtAQw
    DEL(6/17): C:\Perl64\cpan\build\UNIVERSAL-require-0.18-NYtAQw.yml
    DEL(7/17): C:\Perl64\cpan\build\Module-Pluggable-Fast-0.19-ReYY_z
    DEL(8/17): C:\Perl64\cpan\build\Module-Pluggable-Fast-0.19-ReYY_z.yml
    DEL(9/17): C:\Perl64\cpan\build\Class-Default-1.51-IJ1axS
    DEL(10/17): C:\Perl64\cpan\build\Class-Default-1.51-IJ1axS.yml
    DEL(11/17): C:\Perl64\cpan\build\Data-JavaScript-Anon-1.03-K_M36v
    DEL(12/17): C:\Perl64\cpan\build\Data-JavaScript-Anon-1.03-K_M36v.yml
    DEL(13/17): C:\Perl64\cpan\build\Template-Provider-FromDATA-0.13-Bt6PPj
    DEL(14/17): C:\Perl64\cpan\build\Template-Provider-FromDATA-0.13-Bt6PPj.yml
    DEL(15/17): C:\Perl64\cpan\build\MozRepl-0.06-vTaZyz
    DEL(16/17): C:\Perl64\cpan\build\MozRepl-0.06-vTaZyz.yml
    DEL(17/17): C:\Perl64\cpan\build\IPC-Run-0.94-zeKbev.yml
    WWW-Mechanize-Firefox-0.79/
    WWW-Mechanize-Firefox-0.79/.travis.yml
    WWW-Mechanize-Firefox-0.79/META.json
    WWW-Mechanize-Firefox-0.79/Changes
    WWW-Mechanize-Firefox-0.79/META.yml
    WWW-Mechanize-Firefox-0.79/makeppd.pl
    WWW-Mechanize-Firefox-0.79/MANIFEST.SKIP
    WWW-Mechanize-Firefox-0.79/.gitignore
    WWW-Mechanize-Firefox-0.79/README.mkdn
    WWW-Mechanize-Firefox-0.79/examples/
    WWW-Mechanize-Firefox-0.79/examples/urlbar.pl
    WWW-Mechanize-Firefox-0.79/examples/scrape-ff.pl
    WWW-Mechanize-Firefox-0.79/examples/bcat.pl
    WWW-Mechanize-Firefox-0.79/examples/js-console.pl
    WWW-Mechanize-Firefox-0.79/examples/open-local-file.pl
    WWW-Mechanize-Firefox-0.79/examples/README
    WWW-Mechanize-Firefox-0.79/examples/manipulate-javascript.pl
    WWW-Mechanize-Firefox-0.79/examples/proxy-settings.pl
    WWW-Mechanize-Firefox-0.79/examples/fullscreen.pl
    WWW-Mechanize-Firefox-0.79/examples/gen_examples_pod.pl
    WWW-Mechanize-Firefox-0.79/examples/javascript.pl
    WWW-Mechanize-Firefox-0.79/examples/tail-console.pl
    WWW-Mechanize-Firefox-0.79/examples/open-url.pl
    WWW-Mechanize-Firefox-0.79/examples/screenshot.pl
    WWW-Mechanize-Firefox-0.79/examples/dump-links.pl
    WWW-Mechanize-Firefox-0.79/inc/
    WWW-Mechanize-Firefox-0.79/inc/IO/
    WWW-Mechanize-Firefox-0.79/inc/IO/Catch.pm
    WWW-Mechanize-Firefox-0.79/inc/Test/
    WWW-Mechanize-Firefox-0.79/inc/Test/HTTP/
    WWW-Mechanize-Firefox-0.79/inc/Test/HTTP/LocalServer.pm
    WWW-Mechanize-Firefox-0.79/inc/Test/HTTP/log-server
    WWW-Mechanize-Firefox-0.79/inc/Test/HTTP/cookie-server
    WWW-Mechanize-Firefox-0.79/README
    WWW-Mechanize-Firefox-0.79/t/
    WWW-Mechanize-Firefox-0.79/t/50-form2.t
    WWW-Mechanize-Firefox-0.79/t/55-basic-auth.t
    WWW-Mechanize-Firefox-0.79/t/51-mech-links-base.html
    WWW-Mechanize-Firefox-0.79/t/401-server
    WWW-Mechanize-Firefox-0.79/t/65-is_visible_none.html
    WWW-Mechanize-Firefox-0.79/t/99-versions.t
    WWW-Mechanize-Firefox-0.79/t/51-mech-links.t
    WWW-Mechanize-Firefox-0.79/t/70-rt71216.t
    WWW-Mechanize-Firefox-0.79/t/50-click-coordinates.t
    WWW-Mechanize-Firefox-0.79/t/99-changes.t
    WWW-Mechanize-Firefox-0.79/t/50-mech-post.t
    WWW-Mechanize-Firefox-0.79/t/51-mech-submit.html
    WWW-Mechanize-Firefox-0.79/t/50-mech-get.t
    WWW-Mechanize-Firefox-0.79/t/52-mech-xpath.t
    WWW-Mechanize-Firefox-0.79/t/47-mech-memleak2.t
    WWW-Mechanize-Firefox-0.79/t/65-is_visible.t
    WWW-Mechanize-Firefox-0.79/t/53-mech-capture-js-error.t
    WWW-Mechanize-Firefox-0.79/t/51-click_js.t
    WWW-Mechanize-Firefox-0.79/t/65-is_visible_text.html
    WWW-Mechanize-Firefox-0.79/t/49-mech-get-file.html
    WWW-Mechanize-Firefox-0.79/t/47-mech-ref-memleak.t
    WWW-Mechanize-Firefox-0.79/t/50-mech-error.t
    WWW-Mechanize-Firefox-0.79/t/52-iframeset.html
    WWW-Mechanize-Firefox-0.79/t/01-mech-destroy.t
    WWW-Mechanize-Firefox-0.79/t/50-rt65615.t
    WWW-Mechanize-Firefox-0.79/t/51-mech-set-content.t
    WWW-Mechanize-Firefox-0.79/t/50-click.t
    WWW-Mechanize-Firefox-0.79/t/48-mech-launch.t
    WWW-Mechanize-Firefox-0.79/t/50-mech-encoding.t
    WWW-Mechanize-Firefox-0.79/t/50-form2.html
    WWW-Mechanize-Firefox-0.79/t/65-is_visible_reload.html
    WWW-Mechanize-Firefox-0.79/t/50-load-and-load.t
    WWW-Mechanize-Firefox-0.79/t/00-load.t
    WWW-Mechanize-Firefox-0.79/t/52-frame-document.t
    WWW-Mechanize-Firefox-0.79/t/75-save_url-cookies.t
    WWW-Mechanize-Firefox-0.79/t/50-follow-link.t
    WWW-Mechanize-Firefox-0.79/t/51-mech-field-frameset.html
    WWW-Mechanize-Firefox-0.79/t/52-frameset.html
    WWW-Mechanize-Firefox-0.79/t/70-urlbar.html
    WWW-Mechanize-Firefox-0.79/t/49-mech-nav.t
    WWW-Mechanize-Firefox-0.79/t/50-mech-forms.t
    WWW-Mechanize-Firefox-0.79/t/52-mech-api-find_link-frames.t
    WWW-Mechanize-Firefox-0.79/t/51-mech-form-with-fields.t
    WWW-Mechanize-Firefox-0.79/t/70-two-instances.t
    WWW-Mechanize-Firefox-0.79/t/mixi_jp_index.html
    WWW-Mechanize-Firefox-0.79/t/47-mech-simplest.t
    WWW-Mechanize-Firefox-0.79/t/65-mech-meta.t
    WWW-Mechanize-Firefox-0.79/t/70-rt71216.html
    WWW-Mechanize-Firefox-0.79/t/65-is_visible_remove.html
    WWW-Mechanize-Firefox-0.79/t/sophos_co_jp_index.html
    WWW-Mechanize-Firefox-0.79/t/49-mech-reuse.t
    WWW-Mechanize-Firefox-0.79/t/52-subframe.html
    WWW-Mechanize-Firefox-0.79/t/99-examples.t
    WWW-Mechanize-Firefox-0.79/t/52-selector-relative.html
    WWW-Mechanize-Firefox-0.79/t/99-todo.t
    WWW-Mechanize-Firefox-0.79/t/51-mech-sandbox.html
    WWW-Mechanize-Firefox-0.79/t/50-popup.t
    WWW-Mechanize-Firefox-0.79/t/50-mech-content.t
    WWW-Mechanize-Firefox-0.79/t/50-click-coordinates-js.html
    WWW-Mechanize-Firefox-0.79/t/50-click.html
    WWW-Mechanize-Firefox-0.79/t/50-allow-js.t
    WWW-Mechanize-Firefox-0.79/t/53-mech-capture-js-noerror.html
    WWW-Mechanize-Firefox-0.79/t/51-mech-sandbox.t
    WWW-Mechanize-Firefox-0.79/t/50-app-new.t
    WWW-Mechanize-Firefox-0.79/t/70-urlbar-2.html
    WWW-Mechanize-Firefox-0.79/t/52-selector-relative.t
    WWW-Mechanize-Firefox-0.79/t/52-mech-api-find_link.t
    WWW-Mechanize-Firefox-0.79/t/50-mech-closeTab.t
    WWW-Mechanize-Firefox-0.79/t/99-unix-text.t
    WWW-Mechanize-Firefox-0.79/t/99-pod.t
    WWW-Mechanize-Firefox-0.79/t/53-mech-capture-js-error.html
    WWW-Mechanize-Firefox-0.79/t/50-mech-get-nocache.t
    WWW-Mechanize-Firefox-0.79/t/51-empty-page.html
    WWW-Mechanize-Firefox-0.79/t/52-frameset-recursive.html
    WWW-Mechanize-Firefox-0.79/t/50-mech-new-with-tab.t
    WWW-Mechanize-Firefox-0.79/t/50-form-with-fields.t
    WWW-Mechanize-Firefox-0.79/t/50-tick.html
    WWW-Mechanize-Firefox-0.79/t/52-selector-frames.t
    WWW-Mechanize-Firefox-0.79/t/rt78706.t
    WWW-Mechanize-Firefox-0.79/t/70-urlbar.t
    WWW-Mechanize-Firefox-0.79/t/60-mech-cookies.t
    WWW-Mechanize-Firefox-0.79/t/51-mech-links-nobase.html
    WWW-Mechanize-Firefox-0.79/t/50-mech-multi-event.t
    WWW-Mechanize-Firefox-0.79/t/65-is_visible_class.html
    WWW-Mechanize-Firefox-0.79/t/52-frameset-partly-404.html
    WWW-Mechanize-Firefox-0.79/t/52-frameset-deep.html
    WWW-Mechanize-Firefox-0.79/t/51-form-number-blakew.t
    WWW-Mechanize-Firefox-0.79/t/70-tag-team.t
    WWW-Mechanize-Firefox-0.79/t/50-mech-event.t
    WWW-Mechanize-Firefox-0.79/t/49-mech-get-file.t
    WWW-Mechanize-Firefox-0.79/t/99-manifest.t
    WWW-Mechanize-Firefox-0.79/t/rt65615.html
    WWW-Mechanize-Firefox-0.79/t/70-rt70106-reload.t
    WWW-Mechanize-Firefox-0.79/t/50-mech-status.t
    WWW-Mechanize-Firefox-0.79/t/helper.pm
    WWW-Mechanize-Firefox-0.79/t/70-mech-png.t
    WWW-Mechanize-Firefox-0.79/t/70-real-status.t
    WWW-Mechanize-Firefox-0.79/t/51-mech-navigation.t
    WWW-Mechanize-Firefox-0.79/t/50-mech-bufsize.t
    WWW-Mechanize-Firefox-0.79/t/50-mech-ct.t
    WWW-Mechanize-Firefox-0.79/t/50-mech-new-dsl.t
    WWW-Mechanize-Firefox-0.79/t/50-form3.html
    WWW-Mechanize-Firefox-0.79/t/50-mech-activateTab.t
    WWW-Mechanize-Firefox-0.79/t/70-download-url.t
    WWW-Mechanize-Firefox-0.79/t/50-mech-set-fields-875912.htm
    WWW-Mechanize-Firefox-0.79/t/50-mech-new.t
    WWW-Mechanize-Firefox-0.79/t/65-is_visible_hidden.html
    WWW-Mechanize-Firefox-0.79/t/rt65615.t
    WWW-Mechanize-Firefox-0.79/t/65-set_visible.t
    WWW-Mechanize-Firefox-0.79/t/51-mech-submit.t
    WWW-Mechanize-Firefox-0.79/t/51-form-number-blakew.html
    WWW-Mechanize-Firefox-0.79/t/60-mech-custom-headers.t
    WWW-Mechanize-Firefox-0.79/t/52-mech-api-find_link.html
    WWW-Mechanize-Firefox-0.79/t/rt84418.t
    WWW-Mechanize-Firefox-0.79/t/50-mech-save-dialog.t
    WWW-Mechanize-Firefox-0.79/t/50-click-coordinates-js.t
    WWW-Mechanize-Firefox-0.79/t/select.html
    WWW-Mechanize-Firefox-0.79/t/50-tick.t
    WWW-Mechanize-Firefox-0.79/t/select.t
    WWW-Mechanize-Firefox-0.79/t/51-mech-field.t
    WWW-Mechanize-Firefox-0.79/t/51-click_js.html
    WWW-Mechanize-Firefox-0.79/t/50-app-profile.t
    WWW-Mechanize-Firefox-0.79/t/mechanize/
    WWW-Mechanize-Firefox-0.79/t/mechanize/autocheck.t
    WWW-Mechanize-Firefox-0.79/t/mechanize/content.t
    WWW-Mechanize-Firefox-0.79/t/52-selector-noframes.t
    WWW-Mechanize-Firefox-0.79/t/50-mech-set-fields-875912.t
    WWW-Mechanize-Firefox-0.79/t/51-click_button.t
    WWW-Mechanize-Firefox-0.79/t/65-mech-meta.html
    WWW-Mechanize-Firefox-0.79/t/52-frame-event.t
    WWW-Mechanize-Firefox-0.79/lib/
    WWW-Mechanize-Firefox-0.79/lib/HTML/
    WWW-Mechanize-Firefox-0.79/lib/HTML/Display/
    WWW-Mechanize-Firefox-0.79/lib/HTML/Display/MozRepl.pm
    WWW-Mechanize-Firefox-0.79/lib/Firefox/
    WWW-Mechanize-Firefox-0.79/lib/Firefox/Application/
    WWW-Mechanize-Firefox-0.79/lib/Firefox/Application/API36.pm
    WWW-Mechanize-Firefox-0.79/lib/Firefox/Application/API35.pm
    WWW-Mechanize-Firefox-0.79/lib/Firefox/Application/API40.pm
    WWW-Mechanize-Firefox-0.79/lib/Firefox/Application.pm
    WWW-Mechanize-Firefox-0.79/lib/WWW/
    WWW-Mechanize-Firefox-0.79/lib/WWW/Mechanize/
    WWW-Mechanize-Firefox-0.79/lib/WWW/Mechanize/Firefox/
    WWW-Mechanize-Firefox-0.79/lib/WWW/Mechanize/Firefox/FAQ.pod
    WWW-Mechanize-Firefox-0.79/lib/WWW/Mechanize/Firefox/DSL.pm
    WWW-Mechanize-Firefox-0.79/lib/WWW/Mechanize/Firefox/Cookbook.pod
    WWW-Mechanize-Firefox-0.79/lib/WWW/Mechanize/Firefox/Examples.pm
    WWW-Mechanize-Firefox-0.79/lib/WWW/Mechanize/Firefox/Troubleshooting.pod
    WWW-Mechanize-Firefox-0.79/lib/WWW/Mechanize/Firefox/Installation.pod
    WWW-Mechanize-Firefox-0.79/lib/WWW/Mechanize/Firefox.pm
    WWW-Mechanize-Firefox-0.79/lib/HTTP/
    WWW-Mechanize-Firefox-0.79/lib/HTTP/Cookies/
    WWW-Mechanize-Firefox-0.79/lib/HTTP/Cookies/MozRepl.pm
    WWW-Mechanize-Firefox-0.79/MANIFEST
    WWW-Mechanize-Firefox-0.79/xt/
    WWW-Mechanize-Firefox-0.79/xt/99-versions.t
    WWW-Mechanize-Firefox-0.79/xt/99-changes.t
    WWW-Mechanize-Firefox-0.79/xt/99-examples.t
    WWW-Mechanize-Firefox-0.79/xt/99-todo.t
    WWW-Mechanize-Firefox-0.79/xt/99-unix-text.t
    WWW-Mechanize-Firefox-0.79/xt/99-pod.t
    WWW-Mechanize-Firefox-0.79/xt/99-manifest.t
    WWW-Mechanize-Firefox-0.79/INSTALL
    WWW-Mechanize-Firefox-0.79/Makefile.PL
    WWW-Mechanize-Firefox-0.79/runtests.pl
    Configuring C/CO/CORION/WWW-Mechanize-Firefox-0.79.tar.gz with Makefile.PL
    (Re)Creating lib/WWW/Mechanize/Firefox/Examples.pm
    Can't locate MozRepl/RemoteObject.pm in @INC (you may need to install the MozRepl::RemoteObject module) (@INC contains:
    C:/Perl64/site/lib C:/Perl64/lib . lib) at lib/Firefox/Application.pm line 4.
    BEGIN failed--compilation aborted at lib/Firefox/Application.pm line 4.
    Compilation failed in require at ./examples/../lib/WWW/Mechanize/Firefox.pm line 12.
    BEGIN failed--compilation aborted at ./examples/../lib/WWW/Mechanize/Firefox.pm line 12.
    Compilation failed in require at examples/gen_examples_pod.pl line 32.
    Checking if your kit is complete...
    Looks good
    Warning: prerequisite MozRepl::RemoteObject 0.39 not found.
    Warning: prerequisite Object::Import 0 not found.
    Generating a dmake-style Makefile
    Writing Makefile for WWW::Mechanize::Firefox
    Writing MYMETA.yml and MYMETA.json
    CORION/WWW-Mechanize-Firefox-0.79.tar.gz
    C:\Perl64\bin\perl.exe Makefile.PL INSTALLDIRS=site -- OK
    Running make for C/CO/CORION/WWW-Mechanize-Firefox-0.79.tar.gz
    ---- Unsatisfied dependencies detected during ----
    ---- CORION/WWW-Mechanize-Firefox-0.79.tar.gz ----
    MozRepl::RemoteObject requires
    Object::Import requires
    Running install for module 'MozRepl::RemoteObject'
    Checksum for C:\Perl64\cpan\sources\authors\id\C\CO\CORION\MozRepl-RemoteObject-0.39.tar.gz ok
    MozRepl-RemoteObject-0.39/
    MozRepl-RemoteObject-0.39/META.json
    MozRepl-RemoteObject-0.39/Changes
    MozRepl-RemoteObject-0.39/META.yml
    MozRepl-RemoteObject-0.39/MANIFEST.SKIP
    MozRepl-RemoteObject-0.39/.gitignore
    MozRepl-RemoteObject-0.39/t/
    MozRepl-RemoteObject-0.39/t/02-repl.t
    MozRepl-RemoteObject-0.39/t/01-appversion.t
    MozRepl-RemoteObject-0.39/t/99-versions.t
    MozRepl-RemoteObject-0.39/t/11-memleak-callback.t
    MozRepl-RemoteObject-0.39/t/01-backend-anyevent-timer.t
    MozRepl-RemoteObject-0.39/t/99-changes.t
    MozRepl-RemoteObject-0.39/t/01-release-action.t
    MozRepl-RemoteObject-0.39/t/03-unicode.t
    MozRepl-RemoteObject-0.39/t/01-expr.t
    MozRepl-RemoteObject-0.39/t/00-load.t
    MozRepl-RemoteObject-0.39/t/01-backend-anyevent.t
    MozRepl-RemoteObject-0.39/t/01-constant.t
    MozRepl-RemoteObject-0.39/t/11-memleak-constant.t
    MozRepl-RemoteObject-0.39/t/10-xul-hud.xul
    MozRepl-RemoteObject-0.39/t/10-xul-hud.t
    MozRepl-RemoteObject-0.39/t/01-queue.t
    MozRepl-RemoteObject-0.39/t/01-callback.t
    MozRepl-RemoteObject-0.39/t/11-memleak-declare.t
    MozRepl-RemoteObject-0.39/t/11-memleak.t
    MozRepl-RemoteObject-0.39/t/99-todo.t
    MozRepl-RemoteObject-0.39/t/01-object.t
    MozRepl-RemoteObject-0.39/t/01-multiline-string.t
    MozRepl-RemoteObject-0.39/t/01-callback-overhead.t
    MozRepl-RemoteObject-0.39/t/sync-callbacks.html
    MozRepl-RemoteObject-0.39/t/99-unix-text.t
    MozRepl-RemoteObject-0.39/t/02-multiple-instances.t
    MozRepl-RemoteObject-0.39/t/99-pod.t
    MozRepl-RemoteObject-0.39/t/01-expr-anyevent.t
    MozRepl-RemoteObject-0.39/t/04-looong-input.t
    MozRepl-RemoteObject-0.39/t/99-manifest.t
    MozRepl-RemoteObject-0.39/t/01-dive.t
    MozRepl-RemoteObject-0.39/t/01-invoke.t
    MozRepl-RemoteObject-0.39/t/01-hash.t
    MozRepl-RemoteObject-0.39/t/05-callback-parameter.t
    MozRepl-RemoteObject-0.39/t/02-synopsis.t
    MozRepl-RemoteObject-0.39/t/01-array.t
    MozRepl-RemoteObject-0.39/lib/
    MozRepl-RemoteObject-0.39/lib/MozRepl/
    MozRepl-RemoteObject-0.39/lib/MozRepl/RemoteObject.pm
    MozRepl-RemoteObject-0.39/lib/MozRepl/AnyEvent.pm
    MozRepl-RemoteObject-0.39/lib/MozRepl/Plugin/
    MozRepl-RemoteObject-0.39/lib/MozRepl/Plugin/JSON2.pm
    MozRepl-RemoteObject-0.39/lib/MozRepl/RemoteObject/
    MozRepl-RemoteObject-0.39/lib/MozRepl/RemoteObject/Methods.pm
    MozRepl-RemoteObject-0.39/MANIFEST
    MozRepl-RemoteObject-0.39/Makefile.PL
    Configuring C/CO/CORION/MozRepl-RemoteObject-0.39.tar.gz with Makefile.PL
    Checking if your kit is complete...
    Looks good
    Warning: prerequisite IPC::Run 0 not found.
    Generating a dmake-style Makefile
    Writing Makefile for MozRepl::RemoteObject
    Writing MYMETA.yml and MYMETA.json
    CORION/MozRepl-RemoteObject-0.39.tar.gz
    C:\Perl64\bin\perl.exe Makefile.PL INSTALLDIRS=site -- OK
    Running make for C/CO/CORION/MozRepl-RemoteObject-0.39.tar.gz
    ---- Unsatisfied dependencies detected during ----
    ---- CORION/MozRepl-RemoteObject-0.39.tar.gz ----
    IPC::Run requires
    Running install for module 'IPC::Run'
    Checksum for C:\Perl64\cpan\sources\authors\id\T\TO\TODDR\IPC-Run-0.94.tar.gz ok
    IPC-Run-0.94/
    IPC-Run-0.94/abuse/
    IPC-Run-0.94/Changes
    IPC-Run-0.94/eg/
    IPC-Run-0.94/lib/
    IPC-Run-0.94/LICENSE
    IPC-Run-0.94/Makefile.PL
    IPC-Run-0.94/MANIFEST
    IPC-Run-0.94/META.json
    IPC-Run-0.94/META.yml
    IPC-Run-0.94/README
    IPC-Run-0.94/t/
    IPC-Run-0.94/TODO
    IPC-Run-0.94/t/97_meta.t
    IPC-Run-0.94/t/98_pod.t
    IPC-Run-0.94/t/98_pod_coverage.t
    IPC-Run-0.94/t/99_perl_minimum_version.t
    IPC-Run-0.94/t/adopt.t
    IPC-Run-0.94/t/binmode.t
    IPC-Run-0.94/t/bogus.t
    IPC-Run-0.94/t/filter.t
    IPC-Run-0.94/t/harness.t
    IPC-Run-0.94/t/io.t
    IPC-Run-0.94/t/kill_kill.t
    IPC-Run-0.94/t/lib/
    IPC-Run-0.94/t/parallel.t
    IPC-Run-0.94/t/pty.t
    IPC-Run-0.94/t/pump.t
    IPC-Run-0.94/t/run.t
    IPC-Run-0.94/t/signal.t
    IPC-Run-0.94/t/timeout.t
    IPC-Run-0.94/t/timer.t
    IPC-Run-0.94/t/win32_compile.t
    IPC-Run-0.94/t/windows_search_path.t
    IPC-Run-0.94/t/lib/Test.pm
    IPC-Run-0.94/lib/IPC/
    IPC-Run-0.94/lib/IPC/Run/
    IPC-Run-0.94/lib/IPC/Run.pm
    IPC-Run-0.94/lib/IPC/Run/Debug.pm
    IPC-Run-0.94/lib/IPC/Run/IO.pm
    IPC-Run-0.94/lib/IPC/Run/Timer.pm
    IPC-Run-0.94/lib/IPC/Run/Win32Helper.pm
    IPC-Run-0.94/lib/IPC/Run/Win32IO.pm
    IPC-Run-0.94/lib/IPC/Run/Win32Pump.pm
    IPC-Run-0.94/eg/factorial
    IPC-Run-0.94/eg/factorial_pipe
    IPC-Run-0.94/eg/factorial_scalar
    IPC-Run-0.94/eg/run_daemon
    IPC-Run-0.94/eg/runsh
    IPC-Run-0.94/eg/runsu
    IPC-Run-0.94/eg/synopsis_scripting
    IPC-Run-0.94/abuse/blocking_debug_with_sub_coprocess
    IPC-Run-0.94/abuse/blocking_writes
    IPC-Run-0.94/abuse/broken_pipe_on_bad_executable_name
    IPC-Run-0.94/abuse/timers
    Configuring T/TO/TODDR/IPC-Run-0.94.tar.gz with Makefile.PL
    Checking if your kit is complete...
    Looks good
    Generating a dmake-style Makefile
    Writing Makefile for IPC::Run
    Writing MYMETA.yml and MYMETA.json
    TODDR/IPC-Run-0.94.tar.gz
    C:\Perl64\bin\perl.exe Makefile.PL INSTALLDIRS=site -- OK
    Running make for T/TO/TODDR/IPC-Run-0.94.tar.gz
    cp lib/IPC/Run/Win32IO.pm blib\lib\IPC\Run\Win32IO.pm
    cp lib/IPC/Run/IO.pm blib\lib\IPC\Run\IO.pm
    cp lib/IPC/Run/Debug.pm blib\lib\IPC\Run\Debug.pm
    cp lib/IPC/Run.pm blib\lib\IPC\Run.pm
    cp lib/IPC/Run/Win32Pump.pm blib\lib\IPC\Run\Win32Pump.pm
    cp lib/IPC/Run/Timer.pm blib\lib\IPC\Run\Timer.pm
    cp lib/IPC/Run/Win32Helper.pm blib\lib\IPC\Run\Win32Helper.pm
    TODDR/IPC-Run-0.94.tar.gz
    C:\Perl64\site\bin\dmake.exe -- OK
    Running make test
    "C:\Perl64\bin\perl.exe" "-MExtUtils::Command::MM" "-MTest::Harness" "-e" "undef *Test::Harness::Switches;
    test_harness(0, 'blib\lib', 'blib\arch')" t/*.t
    t/97_meta.t .................. skipped: Author tests not required for installation
    t/98_pod.t ................... skipped: Author tests not required for installation
    t/98_pod_coverage.t .......... skipped: Author tests not required for installation
    t/99_perl_minimum_version.t .. skipped: Author tests not required for installation
    t/adopt.t .................... skipped: adopt not implemented yet
    t/binmode.t .................. ok
    t/bogus.t .................... ok
    t/filter.t ................... ok
    t/harness.t .................. ok
    t/io.t ....................... ok
    t/kill_kill.t ................ skipped: Temporarily ignoring test failure on Win32
    t/parallel.t ................. skipped: Parallel tests are dangerous on MSWin32
    t/pty.t ...................... skipped: IO::Pty not installed
    t/pump.t ..................... 1/27 Warning: unable to close filehandle GEN5 properly: Bad file descriptor at
    C:\Perl64\cpan\build\IPC-Run-0.94-C5snDY\blib\lib/IPC/Run/Win32IO.pm line 126.
    t/pump.t ..................... ok
    t/run.t ...................... 1/268 # WARN: Warning: unable to close filehandle GEN5 properly: Bad file descriptor at
    C:\Perl64\cpan\build\IPC-Run-0.94-C5snDY\blib\lib/IPC/Run/Win32IO.pm line 126.
    # WARN: Warning: unable to close filehandle GEN14 properly: Bad file descriptor at C:\Perl64\cpan\build\IPC-Run-0.94-
    C5snDY\blib\lib/IPC/Run/Win32IO.pm line 126.
    # WARN: Warning: unable to close filehandle GEN19 properly: Bad file descriptor at C:\Perl64\cpan\build\IPC-Run-0.94-
    C5snDY\blib\lib/IPC/Run/Win32IO.pm line 126.
    # WARN: Warning: unable to close filehandle GEN24 properly: Bad file descriptor at C:\Perl64\cpan\build\IPC-Run-0.94-
    C5snDY\blib\lib/IPC/Run/Win32IO.pm line 126.
    # WARN: Warning: unable to close filehandle GEN28 properly: Bad file descriptor at C:\Perl64\cpan\build\IPC-Run-0.94-
    C5snDY\blib\lib/IPC/Run/Win32IO.pm line 126.
    t/run.t ...................... 106/268 # WARN: Warning: unable to close filehandle GEN37 properly: Bad file descriptor at
    C:\Perl64\cpan\build\IPC-Run-0.94-C5snDY\blib\lib/IPC/Run/Win32IO.pm line 126.
    # WARN: Warning: unable to close filehandle GEN42 properly: Bad file descriptor at C:\Perl64\cpan\build\IPC-Run-0.94-
    C5snDY\blib\lib/IPC/Run/Win32IO.pm line 126.
    t/run.t ...................... 219/268 # WARN: Warning: unable to close filehandle GEN52 properly: Bad file descriptor at
    C:\Perl64\cpan\build\IPC-Run-0.94-C5snDY\blib\lib/IPC/Run/Win32IO.pm line 126.
    # WARN: Warning: unable to close filehandle GEN57 properly: Bad file descriptor at C:\Perl64\cpan\build\IPC-Run-0.94-
    C5snDY\blib\lib/IPC/Run/Win32IO.pm line 126.
    # WARN: Warning: unable to close filehandle GEN67 properly: Bad file descriptor at C:\Perl64\cpan\build\IPC-Run-0.94-
    C5snDY\blib\lib/IPC/Run/Win32IO.pm line 126.
    # WARN: Warning: unable to close filehandle GEN72 properly: Bad file descriptor at C:\Perl64\cpan\build\IPC-Run-0.94-
    C5snDY\blib\lib/IPC/Run/Win32IO.pm line 126.

    # Failed test 'No warnings found during program call with empty path'
    # at t/run.t line 996.
    # got: 'Warning: unable to close filehandle GEN5 properly: Bad file descriptor at C:\Perl64\cpan\build\IPC-Run-
    0.94-C5snDY\blib\lib/IPC/Run/Win32IO.pm line 126.
    # '
    # expected: undef
    # Looks like you failed 1 test of 268.
    t/run.t ...................... Dubious, test returned 1 (wstat 256, 0x100)
    Failed 1/268 subtests
    (less 32 skipped subtests: 235 okay)
    t/signal.t ................... skipped: Skipping on Win32
    t/timeout.t .................. 9/26 Terminating on signal SIGBREAK(21)
    Terminating on signal SIGBREAK(21)
    Terminating on signal SIGBREAK(21)
    Warning: unable to close filehandle GEN5 properly: Bad file descriptor at C:\Perl64\cpan\build\IPC-Run-0.94-C5snDY\blib\lib/IPC/Run/Win32IO.pm line 126.
    Terminating on signal SIGBREAK(21)
    Warning: unable to close filehandle GEN5 properly: Bad file descriptor at C:\Perl64\cpan\build\IPC-Run-0.94-
    C5snDY\blib\lib/IPC/Run/Win32IO.pm line 126.
    Terminating on signal SIGBREAK(21)
    Terminating on signal SIGBREAK(21)
    Can't spawn "C:\Perl64\site\bin\dmake.exe test": Inappropriate I/O control operation at
    C:\Perl64\lib/CPAN/Distribution.pm line 3617.

    C:\Perl_Programs>
How do you structure and run module test code?
7 direct replies — Read more / Contribute
by nysus
on Feb 23, 2017 at 08:39

    I'd love to get some general pointers from pros on how to efficiently create tests for modules.

    Using the Module::Starter::PBP module, I notice that the t directory has the following test files by default: 00.load.t,  perlcritic.t,  pod-coverage.t,  pod.t.

    Some of the questions I'm trying to answer are: When should I create a new .t file? How should I group my tests into the different .t files? What's best practice for naming the .t files?

    Also, I'd like to be able to run the tests as efficiently as possible from vim, my tool of choice. Right now, I'm using Damian Conway's vim configuration which has a short cut for running make on a module. It runs all the tests it finds. I imagine this could slow things down quite a bit, however, if I'm just interested in running a few of the test files. How are the pros running individual test files quickly and efficiently with vim?

    Thanks!

    $PM = "Perl Monk's";
    $MCF = "Most Clueless Friar Abbot Bishop Pontiff Deacon Curate";
    $nysus = $PM . ' ' . $MCF;
    Click here if you love Perl Monks

What basic things should I know about versioning modules?
6 direct replies — Read more / Contribute
by nysus
on Feb 23, 2017 at 06:34

    I'd like to get some general guidance on how to properly use versioning for my modules.

    My question is prompted by the Module::Starter::PBP module. It has a starter template here.

    The starter template throws an error on this line: use version; $VERSION = qv('0.0.3');. The error is Global symbol "$VERSION" requires explicit package name (did you forget to declare "my $VERSION"?)

    While I could slap a my in front of it and be on my way, I am wondering if maybe it was purposefully left off. I also don't know how this line might be used by other modules. And should I use "my" or "our?" What does qv do? I can't find it in the perldoc but I do find mention of it here on CPAN. But I never installed that module to my knowledge.

    If someone could point me to a good resource that can help explain the what's, why's, and how's of module versioning, I'd appreciate it. Thanks.

    $PM = "Perl Monk's";
    $MCF = "Most Clueless Friar Abbot Bishop Pontiff Deacon Curate";
    $nysus = $PM . ' ' . $MCF;
    Click here if you love Perl Monks


Add your question
Title:
Your question:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post; it's "PerlMonks-approved HTML":


  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.
  • Log In?
    Username:
    Password:

    What's my password?
    Create A New User
    Chatterbox?
    [Discipulus]: my backpack is ready for two nights in the mountains!
    [Corion]: Discipulus: In the mountains during winter?
    [choroba]: SHAttered
    [Discipulus]: yes but in a little house with fireplace; 2 friends and lot of beverages..
    [Corion]: Discipulus: Aah, so it's not really walking through quick-changing weather

    How do I use this? | Other CB clients
    Other Users?
    Others drinking their drinks and smoking their pipes about the Monastery: (5)
    As of 2017-02-24 09:10 GMT
    Sections?
    Information?
    Find Nodes?
    Leftovers?
      Voting Booth?
      Before electricity was invented, what was the Electric Eel called?






      Results (353 votes). Check out past polls.