Without -n or -p the default $_ does not get set since there is no implicit while loop, and the STDIN isn't read either. If we want to have <> and $_ by default in the slurp mode we need one of these switches along with -0777, which on its own merely (un)sets $/. This

echo "hello" | perl -0777 -e 'print'

prints nothing, and with -e it warns of Use of uninitialized value $_. Now this

echo "hello" | perl -0777 -e '$v = <>; print $v'

does print hello. The STDIN can be read into a variable, so 'slurp' is on.

In terms of what this is equivalent to, the mere -0777 only sets $/. We can even add a read

# use warnings;
local $/;
<>;
print;

The <> does read everything in one go but there is no default input and pattern-searching space$_ so what is read is not assigned to anything. With the warnings on we get to hear about it. (Thanks to Jonathan Leffler for mentioning STDIN in a comment.)

In perlvar the conditions are listed for when "... Perl will assume $_ ...". The last bullet

The default place to put the next value or input record when a , readline, readdir or each operation's result is tested by itself as the sole criterion of a while test. Outside a while test, this will not happen.

With -n or -p there is a while (<>) loop setup so $_ does get set.

Note, your example is not exactly equivalent since it does assign.

Comment on specific statements in the question.

The slurp does not get "enabled" by these switches -- it is set up by the -0777 flag. We use them because we get automatic standard input and $_ with them.

Email codedump link for Why use the -p|-n in slurp mode in perl one liner?