Challenge 3: use vs require — Possible Solution ==================================================================== # --- use version --- use strict; use warnings; use feature 'say'; use List::Util qw(max); say max(3, 9, 4); # --- require version --- use strict; use warnings; use feature 'say'; require List::Util; say List::Util::max(3, 9, 4); Output (both versions): 9 Key difference, in one sentence: "use" loads the module at COMPILE time and automatically imports the requested symbols (max) so it can be called directly, while "require" loads at RUNTIME with no automatic import at all, requiring the fully qualified List::Util::max(...) form (or a manual ->import() call) instead. WHY THIS WORKS AS AN ANSWER ------------------------------ The use version reuses the chapter's own List::Util qw(max min sum) example directly, trimmed to just max — the qw(max) import list brings max into the current namespace, so it can be called as a bare max(3, 9, 4), exactly the "used directly, no package prefix needed" behavior the chapter describes. The require version reuses the chapter's own require List::Util; example precisely, and per the chapter's own explanation that require provides "no automatic import," max must be called with its full package-qualified name, List::Util::max(...), since nothing was ever imported into the calling script's own namespace. Both versions produce the identical result, 9 (the largest of 3, 9, and 4) — proving the difference between the two is purely about HOW the module is loaded and whether its symbols are automatically made available, not about any difference in what List::Util's max function itself actually does.