The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

use strict;
use warnings;
use 5.010;

use Protocol::CassandraCQL::Client;
use Protocol::CassandraCQL::Frame;
use Protocol::CassandraCQL qw( OPCODE_OPTIONS OPCODE_SUPPORTED );
use Protocol::CassandraCQL::Frames qw( parse_supported_frame );

use Getopt::Long;

GetOptions(
   'host|h=s' => \(my $HOST = "localhost"),
   'user|u=s' => \my $USERNAME,
   'pass|p=s' => \my $PASSWORD,
   'version|V=i' => \my $CQLVERSION,
) or exit 1;

my $cassie = Protocol::CassandraCQL::Client->new(
   PeerHost => $HOST,
   Username => $USERNAME,
   Password => $PASSWORD,
   CQLVersion => $CQLVERSION,
);
$cassie or die "Cannot connect to $HOST - $@";

my ( $op, $response ) = $cassie->send_message( OPCODE_OPTIONS, Protocol::CassandraCQL::Frame->new );
$op == OPCODE_SUPPORTED or die "Expected OPCODE_SUPPORTED";

my $opts = parse_supported_frame( 1, $response );

foreach my $option ( sort keys %$opts ) {
   print "$option: " . join( ", ", @{ $opts->{$option} } ) . "\n";
}