Backticks use /bin/sh (or cmd), not bash, so you'll need to construct a POSIX shell command. That command could, of course, invoke bash.
The following achieves that, while also fixing code injection bugs:
use String::ShellQuote qw( shell_quote );
my $sort_cmd1 = shell_quote( "sort", "--", $file1 ) . ' 2>&1';
my $sort_cmd2 = shell_quote( "sort", "--", $file2 ) . ' 2>&1';
my $bash_cmd = shell_quote( "comm", "-1", "-3" ) . " <( $sort_cmd1 ) <( $sort_cmd2 )";
my $sh_cmd = shell_quote( "bash", "-c", $bash_cmd );
my $output = `$sh_cmd`;
or
use String::ShellQuote qw( shell_quote );
my $bash_cmd = 'comm -1 -3 <( sort -- "$1" 2>&1 ) <( sort -- "$2" 2>&1 )';
my $sh_cmd = shell_quote( "bash", "-c", $bash_cmd, "dummy", $file1, $file2 );
my $output = `$sh_cmd`;
/bin/shorcmd. Some people expect$ENV{SHELL}to be used, but that makes no sense. Program-provided commands must necessarily target a specific shell, so it makes no sense to use the user's preferred shell. The env var should only be used when creating an interactive shell for the user.