#!/usr/bin/perl use strict; use warnings; use Getopt::Long; GetOptions(    'debug:s' => \my $debug, ) or die; if (defined ($debug)) {    $debug = {map {$_, 1} split /,/, $debug}; } sub debug {    my ($msg) = @_;    my $caller = (caller(1))[3];    warn "$msg\n" if exists $debug->{$caller}; } sub foo {    debug('foo called'); } sub bar {    debug('bar called'); } foo(); bar();