Just a quick post to show off a small and useful script I use whenever I need to "nopaste" some text or code:
#!/usr/bin/perl -w
use strict;
use WWW::Mechanize;
use Getopt::Long;
my %SITE = (
snit => 'http://nopaste.snit.ch/',
scsys => 'http://paste.scsys.co.uk/',
);
my %CONF = (
channel => '',
nick => '', # use your own
summary => '',
paste => '',
site => 'snit',
list => '',
);
GetOptions( \%CONF, 'lang=s', 'nick=s', 'summary|desc=s', 'paste|text=s',
'list!', 'site=s' )
or die "Bad options";
die "No such paste site: $CONF{site}\nValid choices: @{[keys %SITE]}\n"
if !exists $SITE{ $CONF{site} };
my $m = WWW::Mechanize->new;
$m->get( $SITE{ $CONF{site} } );
die $m->res->status_line unless $m->success;
if ( $CONF{list} ) {
print "Possible channels for $CONF{site}:\n",
map {"- $_\n"} grep $_,
$m->current_form()->find_input('channel')->possible_values;
exit;
}
unless ( $CONF{paste} ) {
$CONF{summary} ||= $ARGV[0] || '-';
$CONF{paste} = join "", <>;
}
delete @CONF{qw( site list )};
$m->set_fields(%CONF);
$m->submit;
die $m->res->status_line unless $m->success;
print +( $m->links )[0]->url, "\n";
Since it works has a filter, I can call it from vim or pipe to it. It also works with a file parameter, which is used to set the paste title.
Just before posting this, I looked again on CPAN, and found the follwing:
App::NoPaste: Seems really complete. But does much more than I need, and I like depending only on WWW::Mechanize for such tools.
WWW::Rafb: Well, in an earlier version my script worked with rafb.net, but the site itself is down.
WWW::PasteBin: Such a huge collection of distributions, I wouldn't which to install first.
WebService::NoPaste: Found it years ago when looking for a nopaste utility, but I preferred to write my own.
Clearly, there is no lack of modules to nopaste stuff, so I'm not going to
add my own to the list. :-)
I tried publishing scripts on CPAN, but I feel the toolchain is not really targetting scripts, anyway. Anyway, I have a few utility scripts like the above lying around, and I'm thinking maybe the best way to go with them nowadays is to just publish them on GitHub. Might happen someday.