Arrays werden nicht mit dem Call-By-Value sondern mit dem Call-By-Reference Prinzip übergeben.
Wenn du schreibst:
Dann bedeutet dies, dass das Array welches die Fähigkeiten enthält nicht nur durch die Variable "@skills" sondern auch durch "skills_neu" referenziert wird.
Du musst dir das so vorstellen als ob es in deinem Speicher irgendwo einen Abschnitt gibt welcher dieses Array darstellt. Irgendein Ding mit Daten.
Und die Variablen "@skills" und "skills_neu" sind nur Zeiger welche dem Programm sagen an welcher Stelle diese Daten liegen.
Wenn du den Code schreibst dann sagst du dem Programm er soll den Zeiger in "skills_neu" auf "@skills" setzen. Er wird keine Kopie von den Inhalten anlegen.
Für dein Vorhaben solltest du entweder benutzen oder die Hilfsvariable "skills_neu" direkt vergessen und auf dem Array "@skills" arbeiten so wie es ist.
Was mich im Moment noch stutzig macht ist die eigenartige If-Bediengung Das macht nicht sonderlich viel Sinn den leeren String hier zu verwenden, jeder String enthält den leeren String. Das ist als ob du " if true " schreiben würdest nur aufwendiger...
Was ich ebenfalls nicht ganz verstehe ist folgender Part:
Erstens muss die Signatur der For-Schleife eher so aussehen:
Da 2 Punkte ("..") und 3 Punkte ("...") eine andere Semantik haben.
Dies hier: "for i in 0..4" würde die Zahlen 0, 1, 2, 3 und 4 iterieren, wobei "for i in 0...4" nur über 0, 1, 2 und 3 laufen würde.
Zweitens ist die gesamte Bedingung innerhalb nicht ganz schlüssig.
Ich habe den Verdacht, dass du hier eher folgendes Beabsichtigst: