3. Print

Printing to the console/terminal is normally without problems. However, it could happen that the warning 'print (...) interpreted as function' appears. It is an unnecessary warning, which you can avoid when removing the space between 'print' and the first parenthesis. Another option is to use an extra pair of parentheses before 'print' and after the last parenthesis. So, if it happens, consider.

print(expression); instead of print (expression);
(print (expression)) instead of print (expression);
Or leave all parentheses (I don't like...)
print expression; instead of print(expression);

3.1. Print a list

As we saw, list in Perl is a collection of single values (comma separated and between parentheses), which can be displayed by the function 'print'. The list is passed as an argument.
3.1.1 Print a list with strings
print("abc"); # a list with one string, i.e. a group of characters between apostrophes (1)
print("abc", "---", "def"); # a list with three strings; one-string-alternative: 'print("abc---def")'
Although Perl enables to leave out the parentheses, I'll use them for good reasons (2).
3.1.2 Print a list with numbers
print(1, 2, 3); # a list with three numbers (integer (3)); output: 123
print(1, " ", 2, " ", 3); # a list with three numbers and two spaces; output: 1 2 3
print("1 2 3"); # a list with three 'numbers' and two spaces; output: 1 2 3
A list with a math operation:
print(2 * 3); # output: 6
Note the difference:
print("(2 * 3)"); # output: (2 * 3)
What did you mean?
print(2 + 3 * 4); # output: 14
... or ...
print((2 + 3) * 4); # output: 20
Use parentheses in a smart way! Avoid bad code like:
print(2 + 3) * 4; # output: 5
Another math expression:
print(4 > 3); # output: 1 which means TRUE. 0 means FALSE
A test on equality (modulo operation):
print(0 == (4 % 2)); # the remainder of 4 divided by 2 equals 0; the equation is TRUE, so the output is 1
3.1.3 Print a list with strings and numbers
To print strings, numbers and a math operation, use the concatenation operator (.) :
print("2 * 3 is: " . (2 * 3));
Evaluation from right to left: (2 * 3) results in the number 6, which is converted to a string. The two strings "2 * 3 is: " and "6" are concatenated. Or better, use commas:
print("2 * 3 is: ", 2 * 3);
3.1.4 Print an empty list
A list can be empty. In that case, 'print' will display the value of the special variable (which we'll meet soon). Proof of the pudding:
$_="abcdef";
print(); # the contents of $_, i.e. abcdef, will be printed
or without parentheses:
print; # no argument but the output is the value of $_

3.2. Print output on multi-lines

To print the output on three lines, use the newline character '\n' :
print("Line 1\nLine2\nLine3");
A special case of printing multilines of output is the so called HERE document:
print <<HAIKU;

The west wind whispered,
And touched the eyelids of spring:
Her eyes, Primroses.

R. M. Hansard, 1899
HAIKU
# no whitespace before and after this last tag HAIKU !
Alternative implementation without 'space-last-tag'-problem:

$haiku_text = q{

The west wind whispered,
And touched the eyelids of spring:
Her eyes, Primroses.

R. M. Hansard, 1899
};

print("$haiku_text\n");	
To print blank lines: use '\n' and the repetition operator 'x' for strings
print("Hello", "\n" x 3, "Hello again!"); # "\n" x 3 means three blank lines

3.3. STDOUT

The previous examples would be more precise if a second argument was used: STDOUT
print(STDOUT ("abc"))
What does this mean? Actually, two things:
  1. The 'print' function sends data, i.e. the string "abc", to the default filehandle STDOUT.
  2. STDOUT sends the string "abc" to the standard output file, usually the terminal window.
As you'll expect, 'print' can be associated with an user-defined filehandle in order to send information to a specific file.
open (MY_OUTPUT, ">", "my_datafile") or die "Could not open file 'my_datafile' $!"; # (4)
print(MY_OUTPUT ("abc"));
close (MY_OUTPUT);
The string "abc" will be written to "my_datafile", only if the file "my_datafile" was opened successfully for writing (">" redirects MY_OUTPUT to "my_datafile").

4. Perl is context based

Again, be aware that Perl is a context-based language. This means that Perl always figures out how your data and operators are connected and in which context you use them. Study the next, 'strange' commands:
print("2" + "3"); # numeric addition with strings; output: 5
print((45/2) x 4); # string repetition with numbers; output: "22.522.522.522.5"
Study chapter 5. Context

5. More...

The function 'print' (and 'printf' for formatted output) is almost always used for writing to the terminal window and to files. So it won't surprise you that you'll still meet 'print' (and its applications) in the next chapters.

Exit: 'say' instead of 'print'?

The function 'say' includes the newline character :

use 5.38.1; # necessary for 'say'; I use perl v5.38.1
say("hello!"); # equivalent to print("hello!\n");
The function 'say' is not compatible with all perl versions and needs 'use ...'. So I prefer 'print'

Footnotes
(1) We now use only double apostrophes. The difference's between double and single apostrophes are discussed later.
(2) Parentheses encloses an unit. A list is in my opinion an unit. Furthermore, the use of parentheses reduces the risk of bugs.
(3) 'print(3, 3.14, 2.99792458E8, 2.99792458-e8);' is completely valid. However, mathematical operations with floats and numbers in scientific notation can give unexpected results. We'll discuss this later.
(4) $! is a special variable which returns the system error message; here: if opening of "my_datafile" fails.