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

# simple script to generate perl code from yt-dl.org python code
#   perl gencode.pl < youtube.py
# or
#  youtube-dl -v \
#	--no-cache-dir \
#	--skip-download \
#	--youtube-print-sig-code http://youtu.be/cmSbXsFE3l8 | \
#  tail -n 3 | perl gencode.pl

use warnings;
use strict;

my $len;
my $found;

while (<STDIN>) {
	if (m/if\s+len.\w+.\s+==\s+(\d+)\:/) {
		$len = $1;
		printf("    \x7d elsif (\@s == %d) \x7b\n", $len);
		next;
	}

	if ($len && m/return\s+(.*)\s*$/) {
		my @items = ();
		for (split(/\s*\+\s*/, $1)) {
			if (m/^\w+\[(\d+)\]$/) {
				push @items, "\$s[$1]";
			} elsif (m/^\w+\[:(\d+)\]$/) {
				my $i = $1 - 1;
				push @items, "\@s[0..$i]";
			} elsif (m/^\w+\[(\d+):(\d+)\]$/) {
				my $i = $2 - 1;
				push @items, "\@s[$1..$i]";
			} elsif (m/^\w+\[(\d+):(\d+):-1\]$/) {
				my $i = $2 + 1;
				push @items, "reverse(\@s[$i..$1])";
			} elsif (m/^\w+\[(\d+)::-1\]$/) {
				push @items, "reverse(\@s[0..$1])";
			} elsif (m/^\w+\[:(\d+)\]\[::-1\]$/) {
				my $i = $1 - 1;
				push @items, "reverse(\@s[0..$i])";
			} elsif (m/^\w+\[(\d+):\]$/) {
				my $i = $len - 1;
				push @items, "\@s[$1..$i]";
			} else {
				die "Unable to parse: $_";
			}
		}
		my $str = join(', ', @items);
		printf("        return (%s);\n", $str);
		$found = 1 if $str;
		undef $len;
		next;
	} elsif ($found && m/ExtractorError/) {
		printf("    \x7d\n");
		last;
	}
}