Man könnte zum Beispiel in Funktionen die selben Variablennamen verwenden, da man in Funktionen keinen Zugriff auf die Variablen hätte.
Das kannst du doch. Wenn du eine Globale Variable $X hast und deklarierst in einer Funktion ebenfalls $X aber als Local, dann verwendet die Funktion die lokale Variable. Ich persönlich halte es für nicht sehr glücklich identische Variablennamen in unterschiedlichen Scopes zu nutzen. Dann muß man beim Lesen des Codes gerade in größeren Funktionen zwingend drauf achten was wurde wo deklariert und zum Anderen hat man dann innerhalb der Funktion keinen Zugriff auf eine gleichnamige Globale Variable.